2016-03-11 3 views
0

У меня есть один activity_main_layout с тремя линейными макетами внутри (layout1, layout2 и layout3). Из моей MainActivity я хочу отображать определенные макеты на buttonClicks. Как и при нажатии кнопки firstButton, отображается макет1, второй элемент отображает layout2 и thirdButton отображает layout3. Для этого я использую viewPager. Вот мой код ниже:Android ViewPager Layouts

private class ViewPagerAdapter extends PagerAdapter { 

    @Override 
    public int getCount() { 
     return 3; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == ((View) object); 
    } 

    public Object instantiateItem(View collection, int position) { 

     int resId = -1; 
     switch (position) { 
      case 0: 
       resId = R.id.layout1; 
       Log.e(TAG, "layout1 called"); 
       break; 
      case 1: 
       resId = R.id.layout2; 
       Log.e(TAG, "layout2 called"); 
       break; 
      case 2: 
       resId = R.id.layout3; 
       Log.e(TAG, "layout3 called"); 
       break; 
     } 
     return findViewById(resId); 
    } 

    @Override 
    public void destroyItem(View collection, int position, Object view) { 
     ((ViewPager) collection).removeView((View) view); 
    } 
} 

Layout1 по-умолчанию, отображается на экране при запуске MainActivity.

Когда я вижу журнал, он отображает

03-11 14:34:22.776 23506-23506/com.myapp.app E/MainActivity﹕ layout1 called 
03-11 14:34:22.777 23506-23506/com.myapp.app E/MainActivity﹕ layout2 called 

А потом, когда я нажимаю secondButton журнал показывает layout3 называется

Любая идея по этому поводу? Я пытаюсь достичь as shown in this image

+0

Это ожидаемое поведение, «ViewPager» предварительно загружает следующую страницу. –

+0

Спасибо. проблема в том, когда я нажимаю кнопку ThirdButton, макет все пуст. http://i.stack.imgur.com/XbF8X.png – Megamind

+0

Возможно, проблема в том, что вы неправильно наматываете свои макеты или вообще не надуваете их. Я бы посоветовал вам использовать 'ViewPager' +' Fragments' как элементы пейджера, например. реализации http://stackoverflow.com/questions/18413309/how-to-implement-a-viewpager-with-different-fragments-layouts –

ответ

0

ViewPager вызовет первые 2 страницы при начальной загрузке, а при изменении страницы он загрузит следующую страницу в памяти.

В вашем случае layout1 и layout2 будет называться на начальном уровне и при переходе к layout2 она будет загружать layout3.

Вы можете использовать setOffScreenPageLimit(), чтобы увеличить это число, но по ошибке он будет загружать 2 страницы за раз.

Вы можете сослаться на this относительно вашей проблемы.

+0

Спасибо. Ваше решение сработало для меня. ((ViewPager) коллекция) .setOffscreenPageLimit (getCount() - 1); – Megamind