1

Я хочу показать один и тот же фрагмент, например, фрагмент, имеющий активность дня недели в представлении на весь день с разными данными. Я буду давать параметр dayNumber каждому экземпляру, который создается и показывает связанные действия. Проблема в том, что я вижу один и тот же фрагмент на каждой вкладке независимо от того, какой параметр я передал. Я думаю, что последний фрагмент, добавленный или созданный пейджером, переопределяет все другие экземпляры фрагментов вкладок. Потому что , когда я открываю элемент списка в расходном списке View, открывается во всех фрагментах пейджера. Вот как я использую пейджер и фрагмент.Отображение фрагмента с различными параметрами в закладках пейджера представления

Пейджер

mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      // When swiping between pages, select the 
      // corresponding tab. 
      if (bar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS) 
       if (bar.getSelectedNavigationIndex() != position) 
        bar.setSelectedNavigationItem(position); 

      // should be changed when some solution comes. 
      if (tab == 0) { 
       Fragment ev; 
       if ((ev = (Fragment) mPagerAdapter.instantiateItem(mPager, 
         0)) instanceof frTimetable) 
        ((frTimetable) ev).refresh(day.Monday); 
      } else if (tab == 1) { 
       Fragment ac; 
       if ((ac = (Fragment) mPagerAdapter.instantiateItem(mPager, 
         1)) instanceof frTimetable) 
        ((frTimetable) ac).refresh(day.Tuesday); 
      } 

      tab = position; 
     } 

Fragement

{ 
//class other methods 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fr_timetable, container, false); 
    ExpandList = (ExpandableListView) view.findViewById(R.id.expActivityView); 
    //I will change the list items in refresh method of the fragment for a day type 
    ExpListItems = new ArrayList<Items>(Timetable_Provider.getAllActivites()); 
    ExpAdapter = new ExpandListAdapter(getActivity(), ExpListItems); 
    ExpandList.setAdapter(ExpAdapter); 

    return view; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 
} 

ответ

1

instantiateItem(), конечно, не то, что вы хотите. Это называется ViewPager, а не потребителем ViewPager.

Как правило, вы должны предоставить данные в ViewPager как часть настройки страниц, внутри вашего PagerAdapter. Например, this sample app использует аргументы Bundle, чтобы передать номер страницы страницы Fragment, который является реализацией страницы.

Если данные внутри страницы необходимо обновить, в идеале сама страница сама определяет, что это необходимо и обрабатывает ее. Или используйте шину событий (например, LocalBroadcastManager, EventBus greenrobot, Square's Otto), чтобы опубликовать информацию, которую могут выбрать соответствующие страницы. Нет отличного способа получить доступ к существующей странице вне самой страницы, используя FragmentPagerAdapter или FragmentStatePagerAdapter (например, чтобы нажимать данные на страницу), что является одной из причин I wrote ArrayPagerAdapter.