我将 ViewPager 与 ActionBar 选项卡结合使用,as illustrated here .我使用 ActionBarSherlock 实现向后兼容性,因此父 Activity 扩展 SherlockFragmentActivity,子 fragment 扩展 SherlockFragment。
该解决方案非常适合滑动选项卡,但现在我想动态更改与其中一个选项卡关联的 fragment 。
我已经通读了许多 S.O.关于这个主题的答案(例如 here 和 here ),但我没有找到关于在使用 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();
}
});
您可以在此处查看整个示例:
关于android - 使用 TabsAdapter 动态替换 ViewPager 中的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14819179/