1

В настоящее время я реализую viewpager, который плавно перелистывает три разных макета - все работает хорошо. Проблема возникает, когда я пытаюсь получить доступ к элементам внутри них макетов, я не знаю, с чего начать? Может ли viewflipper даже это сделать? Я так полагаю, потому что это делается в marketpalce и т. Д.?Android: Viewpager или Viewflipper?

активность:

@Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      //pagerviwer 

      MyPagerAdapter adapter = new MyPagerAdapter(); 
      ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager); 
      myPager.setAdapter(adapter); 
      myPager.setCurrentItem(1); 

PageAdapter:

class MyPagerAdapter extends PagerAdapter { 

    public int getCount() { 
     return 3; 
    } 

    public Object instantiateItem(View collection, int position) { 

     LayoutInflater inflater = (LayoutInflater) collection.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     int resId = 0; 
     switch (position) { 
     case 0: 
      resId = R.layout.training_topics; 
      break; 
     case 1: 
      resId = R.layout.behaviour_topics; 

      break; 
     case 2: 
      resId = R.layout.tricks_topics; 
      break; 
     } 

     View v = inflater.inflate(resId, null); 

     ((ViewPager) collection).addView(v, 0); 

     return v; 
    } 

    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) { 
     ((ViewPager) arg0).removeView((View) arg2); 

    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     return arg0 == ((View) arg1); 

    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 
} 

Пример: Скажем, например, если я пытался получить доступ к ImageView внутри traning_topics.xml? Выполнение этого через основное действие просто сбивает его.

ответ

4

Я тоже испытываю это. Он пытается получить доступ к нулевому указателю, когда вы ссылаетесь на свой макет, таким образом вы получаете исключение. Вот решение, которое я нашел:

Android ViewPager findViewById not working - Always returning null

Похоже, что вы должны сначала надуть вид вы хотите внутри метода instantiateItem(View collection, int position). Затем вы должны инициализировать его, вызвав findViewById.

Вы должны сделать это как для корневого узла вашего макета, так и для конкретного виджета, к которому вы пытаетесь получить доступ. Я попытаюсь проверить это решение, но, похоже, имеет смысл. Единственная предсказуемая проблема заключается в том, что вы хотите манипулировать виджетами вида вне этого метода.

ViewPager относительно новый, и я думаю, что Android Dev Team будет меняться/улучшать некоторые, если его функции в будущем. Надеюсь, это поможет, дайте мне знать.

+0

Это точно! В идеальном случае, я попробую этот код позже и дам вам знать! Благодаря! – Jonno

Смежные вопросы