在视图寻呼机的选项卡中显示具有不同参数的片段

时间:2014-12-07 11:31:38

标签: android android-layout android-fragments android-viewpager android-fragmentactivity

我希望在viewpager中显示具有不同数据的所有日期的具有星期几活动的示例片段的相同片段。我将为要实例化的每个片段提供dayNumber参数并显示相关活动。问题是无论我传递什么参数,我都会在每个标签中看到相同的片段。我认为由寻呼机添加或实例化的最后一个片段会覆盖所有其他制表符片段实例。因为当我在spendableList中打开一个列表项时,它会在寻呼机的所有片段中打开。 这就是我使用寻呼机和片段的方式。

寻呼机

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 个答案:

答案 0 :(得分:1)

instantiateItem()肯定不是你想要的。这由ViewPager调用,而不是由ViewPager的消费者调用。

通常,您可以在ViewPager内部将PagerAdapter数据提供给Bundle设置页面。例如,this sample app使用参数Fragment将页面的页码传递给作为页面实现的LocalBroadcastManager

如果需要更新页面内的数据,理想情况下,页面本身会自行确定是否需要并处理它。或者,使用事件总线(例如,FragmentPagerAdapter,greenrobot的EventBus,Square的Otto)来发布相关页面可以拾取的信息。没有很好的方法可以使用FragmentStatePagerAdapter或{{1}}从页面外部获取现有页面(例如,将活动数据推送到页面中),这是其中一个原因{ {3}}