Android 替换Viewpager中的片段/选项卡
我目前正在尝试为我未来的应用程序制作框架。我真的很喜欢ActionBar和ViewPager,但是错过了一个功能。我需要在运行时替换片段/选项卡 使用Official,我希望看到类似replaceTab()的内容,但无论我做什么,片段本身都不会更新。是否尝试:Android 替换Viewpager中的片段/选项卡,android,android-fragments,fragment,android-viewpager,Android,Android Fragments,Fragment,Android Viewpager,我目前正在尝试为我未来的应用程序制作框架。我真的很喜欢ActionBar和ViewPager,但是错过了一个功能。我需要在运行时替换片段/选项卡 使用Official,我希望看到类似replaceTab()的内容,但无论我做什么,片段本身都不会更新。是否尝试: fragmentTransaction.remove(yourframent); 然后: fragmentTransaction.add(yournewfragment); 如果您的片段是从布局文件创建的,则无法在运行时替换它。只能成
fragmentTransaction.remove(yourframent);
然后:
fragmentTransaction.add(yournewfragment);
如果您的
片段
是从布局文件创建的,则无法在运行时替换它。只能成功替换以编程方式添加的片段。请参见非常接近您想要的内容,我需要将片段(在末尾)添加到ViewPager中,并执行了以下操作:
FragmentTransaction ft = fragmentManager.beginTransaction();
new_fragment = Fragment.instantiate(activity, class_name, args);
// The below code removes old fragment and adds the new one at the end.
ft.attach(new_fragment); // <- this adds the fragment at the end
ft.detach(old_fragment); // <- this removes old fragment
// This should be what you're looking for when adding to an Activity instead of a ViewPager
ft.replace(view_id, new_fragment); // <- this is supposed to replace the fragment attached to view_id
// Or if the replace does not work, this might work:
ft.detach(old_fragment);
ft.add(view_id, new_fragment);
// Not to be forgotten: ;)
ft.commit();
FragmentTransaction ft=fragmentManager.beginTransaction();
new_fragment=fragment.instantiate(活动、类名称、参数);
//下面的代码删除旧片段,并在末尾添加新片段。
ft.attach(新的_碎片);// 您必须使用FragmentPagerAdapter来处理片段更改。有三件重要的事情:
- 如果前面的片段存在,请将其删除
- 调用notifyDataSetChanged()刷新页面列表
- 如果请求旧片段,则返回getItemPosition中的位置\u NONE
下面是我在左边和右边页面上使用的代码。我根据用户的操作动态更改片段
public class MyPager extends ViewPager {
private MyPagerAdapter mMyPagerAdapter;
public MyPager(Context context, FragmentActivity activity) {
super(context);
mMyPagerAdapter = new MyPagerAdapter(activity.getSupportFragmentManager());
setAdapter(mMyPagerAdapter);
}
public void replaceLeftFragment(Fragment fragment) {
mMyPagerAdapter.replaceLeftFragment(fragment);
}
public void replaceRightFragment(Fragment fragment) {
mMyPagerAdapter.replaceRightFragment(fragment);
}
}
public class MyPagerAdapter extends FragmentPagerAdapter {
private FragmentManager mFragmentManager;
private Fragment mLeftFragment;
private Fragment mRightFragment;
public MyPagerAdapter(FragmentManager fm) {
super(fm);
mFragmentManager = fm;
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return mLeftFragment;
} else {
return mRightFragment;
}
}
@Override
public int getCount() {
final int nbLeft = (mLeftFragment == null) ? 0 : 1;
final int nbRight = (mRightFragment == null) ? 0 : 1;
return (nbLeft + nbRight);
}
public void replaceLeftFragment(Fragment fragment) {
if (mLeftFragment != null) {
mFragmentManager.beginTransaction().remove(mLeftFragment).commit();
}
mLeftFragment = fragment;
notifyDataSetChanged();
}
public void replaceRightFragment(Fragment fragment) {
if (mRightFragment != null) {
mFragmentManager.beginTransaction().remove(mRightFragment).commit();
}
mRightFragment = fragment;
notifyDataSetChanged();
}
@Override
public int getItemPosition(Object object) {
if ((object!=mLeftFragment) && (object!=mRightFragment)) {
return POSITION_NONE;
}
return super.getItemPosition(object);
}
}