【问题标题】:How to replace fragment at a position in viewpager tab?如何在 viewpager 选项卡中的某个位置替换片段?
【发布时间】:2017-04-16 00:17:25
【问题描述】:

我在 viewpager 中有 3 个标签。我们称它们为标签 A,B,C。每个选项卡都有自己的片段,我们称它们为 frag1、frag2、frag3。 我想用新的片段 frag4 替换标签 A 中的 frag1,并保持 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();
}

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    有两种方法可以替换 viewpager 中的片段。选项一:重写 getItemPosition(Object object) 方法。

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

    当您调用 notifyDataSetChanged() 时,视图分页器将删除所有视图并重新加载它们。但这不是很有效。

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

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多