-3

Мое приложение представляет собой значок, такой как приложение drawerКак получить текущий индекс страницы в фрагменте viewpager?

Каждая страница имеет 12 значков, если более 12 значков, другие значки будут отображаться на следующей странице.

Я использую viewpager и gridview для реализации этого интерфейса. Каждый фрагмент viewpager имеет gridview для отображения элементов.

В FragmentActivity я могу получить текущий индекс страницы, добавив OnPageChangeListener в viewpager.

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
    } 

    @Override 
    public void onPageSelected(int position) { 

    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 

    } 
}); 

Но я не могу получить индекс в фрагменте

public class MyFragment extends Fragment { 

    public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE"; 

    public static final MyFragment newInstance(String message) 
    { 
     MyFragment f = new MyFragment(); 
     Bundle bdl = new Bundle(1); 
     bdl.putString(EXTRA_MESSAGE, message); 
     f.setArguments(bdl); 
     return f; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     String message = getArguments().getString(EXTRA_MESSAGE); 
     View v = inflater.inflate(R.layout.fragment, container, false); 

     //suppose the list has 15 items now 
     ArrayList list=new ArrayList(); 
     list.add(1); 
     list.add(2); 
     list.add(3); 
     list.add(4); 
     list.add(5); 
     list.add(6); 
     list.add(7); 
     list.add(8); 
     list.add(9); 
     list.add(10); 
     list.add(11); 
     list.add(12); 
     list.add(13); 
     list.add(14); 
     list.add(15); 

     GridView gridview = (GridView) v.findViewById(R.id.gridview); 

     int currentIndex=??? //how to get index? 

     if(currentIndex==0){ 
      gridview.setAdapter(new GridViewAdapter(list.subList(0,12)); 
     } else if (currentIndex==1) { 
      gridview.setAdapter(new GridViewAdapter(list.subList(12,15)); 
     } 

     return v; 
    } 


} 

фрагмент в другой странице должны отображаться другой список подменю элементов, как получить индекс в фрагменте?

ответ

2

Существует метод с именем getItem(int position), который вы должны будете переопределить при создании своего FragmentPagerAdapter. Вы можете передать там индекс.

Поскольку у вас есть это:

public static final MyFragment newInstance(String message) { MyFragment f = new MyFragment(); Bundle bdl = new Bundle(1); bdl.putString(EXTRA_MESSAGE, message); f.setArguments(bdl); return f; }

Вы можете поместить свой индекс в вашем BDL и получить его позже в вашем OnCreate()

+0

ли вы имеете в виду передать индекс в newInstance? –

+0

Да, я отредактировал мой ответ –

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