android - 在 View 寻呼机的选项卡中显示具有不同参数的 fragment

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

我想在 viewpager 中显示一个相同的 fragment ,例如具有一周中某一天的 Activity 的 fragment ,用于所有具有不同数据的日子。我将为要实例化并显示相关 Activity 的每个 fragment 提供 dayNumber 参数。问题是无论我传递什么参数,我都会在每个选项卡中看到相同的 fragment 。我认为寻呼机添加或实例化的最后一个 fragment 会覆盖所有其他选项卡 fragment 实例。因为 当我在 expendableList View 中打开一个列表项时,它会在寻呼机的所有 fragment 中打开。 这就是我使用寻呼机和 fragment 的方式。

寻呼机

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;
        }

fragment

{
//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);
}
}

最佳答案

instantiateItem() 当然不是你想要的。这是由 ViewPager 调用的,而不是由 ViewPager 的使用者调用的。

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

如果页面内的数据需要更新,理想情况下,页面本身会自行确定是否需要更新并进行处理。或者,使用事件总线(例如,LocalBroadcastManager、greenrobot 的 EventBus、Square 的 Otto)来发布相关页面可以获取的信息。没有使用 FragmentPagerAdapterFragmentStatePagerAdapter 从页面本身外部访问现有页面的好方法(例如,让 Activity 将数据推送到页面中),这是原因之一I wrote ArrayPagerAdapter .

关于android - 在 View 寻呼机的选项卡中显示具有不同参数的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27342194/

相关文章:

android - 如何真正准确地每分钟更新一个小部件

android - 如何在android/ios下用delphi app全程跟踪用户位置

android - 使用 Google map 时应用程序因 FragmentManager Replace 而崩溃

java - token "start"出现语法错误。非常简单的代码

android - 是否可以更改我的主题 (AppCompat) 中的 AppBar 文本颜色?

android - 在 TabHost 中使用 ViewFlipper

android - 如何使 ImageView float 在 LinearLayout 上方?

java - 如何改进进度条匹配以跟随图像(颜色、角度、形状等)

java - 自定义 ListView 在 Fragment 中旋转时消失

java - 从 fragment 更新 UI