android 弹出fragment,Android中ViewPager获取当前显示的Fragment
前言
在项目中,有时会用到在ViewPager中显示同样类型的Fragment,同时这样的Fragment的个数是动态的,但是PagerAdapter没有给我们提供getCurrentFragment类似的方法。下面就给大家介绍下Android中ViewPager获取当前显示的Fragment的方法,一起看看吧。
一、使用 getSupportFragmentManager().findFragmentByTag()方法
Viewpager + FragmentPagerAdapter 情况下 才好使; FragmentPagerAdapter 有一个特点 凡是加载过的Fragment 都会被保留,既然Fragment不会被销毁,那我们就可以使用findFragmentByTag()方法找到它;但问题是动态创建的话 tag的设置;我们知道动态加载时是可以设置tag的,但是动态创建就没法设置了;如果viewpager使用的是适配器是 FragmentPagerAdapter 的话 ,Fragment就会被设置上tag 根据这个tag 我们就可以获取到当前显示的fragment了;
下面看看这个过程
新创建时 tag ==null
@Override
public Fragment getItem(int position) {
PageTab pageTab = tabs.get(position);
TabFragment tab = new TabFragment();
Log.e(TAG,"====getItem===新创建时的tag:=="+tab.getTag());
tab.getArguments().putSerializable("tab",pageTab);
//取出数据 新建Fragment
return tab;
}
Log 查看 tag 时为 null
E/FileListPagerAdapter: ====getItem===新创建时的tag:==null
将 适配器设置给Viewpager后 的tag
E/MainActivity: ==findCurrentFragment==pagerId:2131492976
E/MainActivity: ==findCurrentFragment==currentItem:0
E/MainActivity: =======findCurrentFragment=========完整Tag===android:switcher:2131492976:0
E/MainActivity: =======findCurrentFragment=========当前显示的Fragment 的tag===:android:switcher:2131492976:0
可以看到 tag的组成;四部分
android : 固定部分
switcher : 固定部分
2131492976 : ViewPager 的id
0 : ViewPager 当前显示的itemPostion
既然FragmentPagerAdapter的特点是保存fragment状态。 就可以利用这个特点通过 findFragmentByTag()找到这个Fragment
//Viewpager + FragmentPagerAdapter 情况下 获取 当前显示的Fragment,只能找已经加载过的Fragment
Fragment fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:"+pager.getId()+":"+pager.getCurrentItem());
二、重写适配器的 setPrimaryItem()方法 ;
这个方法在每次viewpager滑动后都会被调用 而 object参数就是显示的Fragment ;可以在适配器中定义个变量 currentFragment 每次改变时都会获取到显示的Fragment
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
currentFragment = (TabFragment) object;
super.setPrimaryItem(container, position, object);
}
这种方式有一个缺陷 setPrimaryItem()是在 viewpager的滑动监听执行完后才会调用的;所以在 换的个滑动监听中获取当前显示的Fragment 是不对的
总结
以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流。
android 弹出fragment,Android中ViewPager获取当前显示的Fragment相关推荐
- android中监听软键盘的弹出与隐藏,并获取软键盘的高度
最近项目中有一个需求上弹出软键盘的时候,输入框位移至输入框上方,但是Activity中其他的VIew都不动.这个需求需要监听软软键盘的弹出与隐藏,并获取键盘的高度.上网找了一下发现,Android竟然 ...
- android 键盘将底部视图顶起,android 弹出软键盘将底部视图顶起问题
今天要做一个搜索功能,搜索界面采用AutoCompleteTextView做搜索条,然后下面用listview来显示搜索结果,而我的主界面是在底 部用tab做了一个主界面导航,其中有一个搜索按钮,因为 ...
- android弹出框自定义按钮,安卓(kotlin)自定义弹出框
在安卓开发中,我们经常会遇到这种情况,就是可爱的UI们设计了一套属于我们自己风格的弹出框,为了彰显我们自己的风格,使用自动的dialog当然满足不了我们的需求,所以还是得这基础上写出我们自己的提示框, ...
- 2022-02-11 Android 弹出申请访问权限,动态访问权限弹窗,比如存储权限
一.Android 弹出申请访问权限代码,动态访问权限弹窗. public Boolean checkPermission() { boolean isGranted = true; if (andr ...
- android 弹出PopupWindow后背景逐渐变暗
今天,简单讲讲android在弹出 PopupWindow后如何使背景逐渐变暗. 我之前做的效果是在PopupWindow弹出时立即将背景变暗,这个也很简单. 在PopupWindow弹出时,将 ...
- android 弹出对话框时显示键盘
今天,简单讲讲如何在弹出自定义的对话框时,弹出软键盘. 之前,我讲了如何制作自定义的对话框,现在,如果在弹出对话框时,自动弹出软键盘,将光标直接聚焦到自定义对话框的输入框内,那该怎么做呢? 在网上搜索 ...
- Android弹出选项框及指示箭头动画选择
Android弹出选项框及指示箭头动画选择 Android原生的Spinner提供了下拉列表选项框,但在一些流行的APP中,原生的Spinner似乎不太受待见,而通常会有下图所示的下拉列表选项框 ...
- android点击按钮弹出输入框,android 弹出框(输入框和选择框)
1.输入框: final EditText inputServer = new EditText(this); inputServer.setFilters(new InputFilter[]{new ...
- android动态设置软键盘弹出模式,Android 弹出软键盘所遇到的坑及解决方法
重要代码: //1.此layout作为最外层的layout: //2.设置需要调整的view: setAdjustView(View view); //3.如果需要控制输入框的显示与隐藏,可以实现On ...
最新文章
- 使用grep过滤make的输出内容
- java五子棋用到的类_JAVA五子棋用到的知识点以及方法类有哪些?
- 物理化学 相平衡
- 程序员的自我进化:终于明白试图依靠跳槽和转行解决自身问题的,只会越来越差
- shell--基本语法
- 结构体struct的定义和使用
- linux 让暂停的进程恢复,Linux 下进程的挂起和恢复命令
- 在Pandas中直接加载MongoDB的数据
- Adopt Open JDK官方文档(五) Docker镜像
- NoSQL数据库的安装和使用
- 机器视觉及视觉传感器
- CodeSmith(1):使用和语法简介
- bat的errorlevel || bat判断语句是否执行成功
- 黑盒测试——边界值分析
- 内容创业,真的是“唯快不破”么?
- 自动化接口实战(一)
- WebAI.js:一个简单的网页前端 AI 模型部署工具
- OSG_64位动态链接库+静态链接库的使用
- 定位推送分享轻社交网络平台《足迹》——数据库设计
- 适合编程初学者的开源项目:小游戏2048(微信小程序版)