android - 使用 TabsAdapter 动态替换 ViewPager 中的 fragment

标签 android android-fragments actionbarsherlock android-viewpager android-tabs

我将 ViewPager 与 ActionBar 选项卡结合使用,as illustrated here .我使用 ActionBarSherlock 实现向后兼容性,因此父 Activity 扩展 SherlockFragmentActivity,子 fragment 扩展 SherlockFragment。

该解决方案非常适合滑动选项卡,但现在我想动态更改与其中一个选项卡关联的 fragment 。

我已经通读了许多 S.O.关于这个主题的答案(例如 herehere ),但我没有找到关于在使用 ViewPager + 上面的 TabsAdapter 时如何动态更改 fragment 的明确解释。

这就是我现在所拥有的。当用户点击现有 fragment 上的按钮时,我尝试按如下方式替换父 Activity 中的 fragment :

AnotherFragment fragment = new AnotherFragment();           
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

int viewId = R.id.pager;                 // resource id of the ViewPager
int position = Constants.TAB_2;          // tab pos of the fragment to be changed

String tag = "android:switcher:" + viewId + ":" + position;

ft.replace(viewId, fragment, tag);
ft.commit();

mTabsAdapter.notifyDataSetChanged();

这不起作用,所以我遗漏了一些东西。我还尝试使用 getChildFragmentManager() 对嵌套 fragment 执行此操作,但遇到了问题,因为如果没有 API 17、Android 4.2,此功能不可用。

感谢您的帮助!

最佳答案

我做了一个小例子来展示类似的行为。我希望你能重复使用它。

我认为关键是使用 fragment 作为容器并使用它替换您的“真实” fragment 。

例如,查看如何导航到另一个 fragment :

        btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            FragmentTransaction trans = getFragmentManager()
                    .beginTransaction();
            /*
             * IMPORTANT: We use the "root frame" defined in
             * "root_fragment.xml" as the reference to replace fragment
             */
            trans.replace(R.id.root_frame, new SecondFragment());

            /*
             * IMPORTANT: The following lines allow us to add the fragment
             * to the stack and return to it later, by pressing back
             */
            trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            trans.addToBackStack(null);

            trans.commit();
        }
    });

您可以在此处查看整个示例:

https://github.com/danilao/fragments-viewpager-example

关于android - 使用 TabsAdapter 动态替换 ViewPager 中的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14819179/

相关文章:

android - 在 Kotlin 中将值从 Activity 传递到 Fragment

android - ActionBarSherlock布局膨胀错误

android - 为 Android 应用程序设置 ActionBarSherlock 主题

安卓 DexGuard : Exclude Crashlytics from Obfuscation

java - 可在主线程中运行的服务中运行

java - 如何判断传递的 "Fragment"对象的类型

Android如何在扩展 fragment 的类中将json解析为listtview

android - 如何获得深色的 ActionBarSherlock 主题?

android - BroadcastReceiver 没有收到广播

android - 未连接适配器;跳过布局错误