【Andorid X 项目笔记】动态设置ViewPager的Adapter问题(2)
声明
欢迎转载,但请保留文章原始出处:)
博客园:http://www.cnblogs.com
农民伯伯: http://over140.cnblogs.com
正文
由于没有找到嵌套FragmentActivity的方法,只好打算用不同的FragmentPagerAdapter来动态切换ViewPager的,如下:
/**
* 首页切换的三个界面
*/
private FragmentPagerAdapter mPagerAdapter1 = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(final int position) {
switch (position) {
case 1:
return new Fragment1();
case 2:
return new Fragment2();
default:
return new Fragment3();
}
}
@Override
public int getCount() {
return 3;
}
};
private FragmentPagerAdapter mPagerAdapter2 = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(final int position) {
switch (position) {
case 1:
return new Fragment4();
case 2:
return new Fragment5();
default:
return new Fragment6();
}
}
@Override
public int getCount() {
return 3;
}
};
* 首页切换的三个界面
*/
private FragmentPagerAdapter mPagerAdapter1 = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(final int position) {
switch (position) {
case 1:
return new Fragment1();
case 2:
return new Fragment2();
default:
return new Fragment3();
}
}
@Override
public int getCount() {
return 3;
}
};
private FragmentPagerAdapter mPagerAdapter2 = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(final int position) {
switch (position) {
case 1:
return new Fragment4();
case 2:
return new Fragment5();
default:
return new Fragment6();
}
}
@Override
public int getCount() {
return 3;
}
};
然后很自然的想用ViewPager的setAdapter动态设置来切换, 结果发现不起作用!!莫有办法,只好先把Fragment清理一下,如下:
public void switchViewPages(FragmentPagerAdapter mAdapter, int[] tabs) {
if (mViewPager.getAdapter() != null) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Bundle bundle = new Bundle();
int index = mViewPager.getAdapter().getCount();
String key = "index";
while (index >= 0) {
bundle.putInt(key, index);
ft.remove(fm.getFragment(bundle, key));
index--;
}
ft.commit();
}
mViewPager.setAdapter(mAdapter);
if (mViewPager.getAdapter() != null) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Bundle bundle = new Bundle();
int index = mViewPager.getAdapter().getCount();
String key = "index";
while (index >= 0) {
bundle.putInt(key, index);
ft.remove(fm.getFragment(bundle, key));
index--;
}
ft.commit();
}
mViewPager.setAdapter(mAdapter);
查看了一下FragmentManager的源码,学会了getFragmen的用法,这个方法方便通过索引取Fragment。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2010-11-02 [Android1.5]Android2.0版本以下Activity切换动画效果
2007-11-02 Oracle Sys用户用默认密码change_on_install 无法登录的问题(错误代码:ORA-28009)