我在viewpager中有3个标签。让我们称之为 A,B,C 标签。每个标签都有自己的片段,我们称之为 frag1,frag2,frag3 。 我想将标签A中的frag1替换为新的片段frag4 ,并保持viewpager中的其他标签不变。 我试过更换片段,但它不起作用。我需要在pageradapter中实现一些东西吗?
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private FragmentManager mFragmentManager;
private Fragment frag = null;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
mFragmentManager = fm;
}
public void onSwitchToNextFragment() {
mFragmentManager.beginTransaction().remove(frag)
.commit();
if (frag instanceof Fragment1){
Log.v("here","swapping");
frag = Fragment4.newInstance();
}
Log.v("here","notified");
notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
frag = Fragment1.newInstance();
Log.v("here","in getitem");
return frag;
default:
Log.v("here","in default");
return Fragment2.newInstance();
}
}
@Override
public int getCount() {
// Show 3 total pages.
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "SECTION 1";
case 1:
return "SECTION 2";
case 2:
return "SECTION 3";
}
return null;
}
public void switchFrag(){
onSwitchToNextFragment();
// mFragmentManager.beginTransaction().replace(R.id.container,frag).commit();
// mFragmentManager.beginTransaction().add(frag).commit();
notifyDataSetChanged();
}
答案 0 :(得分:0)
有两种方法可以替换viewpager中的片段。选项一:覆盖getItemPosition(Object object)方法。
public int getItemPosition(Object object) {
return POSITION_NONE;
}
当您调用notifyDataSetChanged()时,视图寻呼机将删除所有视图并重新加载它们。但这不是很有效。
或者在实例化新视图时调用instantiateItem()。然后,您可以使用findViewWithTag()来查找要更新的视图,而不是使用notifyDataSetChanged()。此选项更有效,更灵活