2017-04-16 76 views
0

我在viewpager中有3个选项卡。让我们打电话给他们标签A,B,C。每个选项卡都有自己的片段,我们称它们为frag1,frag2,frag3 。 我想用替换标签A中的frag1和新的碎片frag4,并保持viewpager中的其他标签不变。 我试过更换片段,但它不起作用。我是否需要在我的pageradapter中实现某些内容?如何在viewpager选项卡中的位置替换片段?

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

有两种方法可以在viewpager中替换片段。选项一:覆盖getItemPosition(Object object)方法。

public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

当你调用notifyDataSetChanged(),视图寻呼机将删除所有的意见并重新加载它们。但这不是非常有效。

或者在实例化新视图时调用instantiateItem()。然后,您可以使用findViewWithTag()来查找要更新的视图,而不是使用notifyDataSetChanged()。此选项更高效灵活

相关问题