gpt4 book ai didi

android - 替换 Viewpager 中的 fragment/标签

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:12:50 25 4
gpt4 key购买 nike

我目前正在尝试为我 future 的应用程序制作框架。我真的很喜欢 ActionBar 和 ViewPager,但错过了一个功能。我需要在运行时替换 Fragment/Tab。

使用官方 example ,我很想看到像 replaceTab() 这样的东西,但无论我做什么, fragment 本身都不会更新。

最佳答案

您必须使用 FragmentPagerAdapter 来处理 fragment 更改。有 3 件重要的事情:

  • 如果前一个 fragment 存在,则将其删除。

  • 调用 notifyDataSetChanged() 刷新页面列表。

  • 如果请求旧 fragment ,则在 getItemPosition 中返回 POSITION_NONE。

这是我在左页和右页中使用的代码。我根据用户的操作动态更改 fragment 。

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);
}

}

关于android - 替换 Viewpager 中的 fragment/标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9981248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com