前言

在项目中,有时会用到在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相关推荐

  1. android中监听软键盘的弹出与隐藏,并获取软键盘的高度

    最近项目中有一个需求上弹出软键盘的时候,输入框位移至输入框上方,但是Activity中其他的VIew都不动.这个需求需要监听软软键盘的弹出与隐藏,并获取键盘的高度.上网找了一下发现,Android竟然 ...

  2. android 键盘将底部视图顶起,android 弹出软键盘将底部视图顶起问题

    今天要做一个搜索功能,搜索界面采用AutoCompleteTextView做搜索条,然后下面用listview来显示搜索结果,而我的主界面是在底 部用tab做了一个主界面导航,其中有一个搜索按钮,因为 ...

  3. android弹出框自定义按钮,安卓(kotlin)自定义弹出框

    在安卓开发中,我们经常会遇到这种情况,就是可爱的UI们设计了一套属于我们自己风格的弹出框,为了彰显我们自己的风格,使用自动的dialog当然满足不了我们的需求,所以还是得这基础上写出我们自己的提示框, ...

  4. 2022-02-11 Android 弹出申请访问权限,动态访问权限弹窗,比如存储权限

    一.Android 弹出申请访问权限代码,动态访问权限弹窗. public Boolean checkPermission() { boolean isGranted = true; if (andr ...

  5. android 弹出PopupWindow后背景逐渐变暗

    今天,简单讲讲android在弹出  PopupWindow后如何使背景逐渐变暗. 我之前做的效果是在PopupWindow弹出时立即将背景变暗,这个也很简单. 在PopupWindow弹出时,将 ...

  6. android 弹出对话框时显示键盘

    今天,简单讲讲如何在弹出自定义的对话框时,弹出软键盘. 之前,我讲了如何制作自定义的对话框,现在,如果在弹出对话框时,自动弹出软键盘,将光标直接聚焦到自定义对话框的输入框内,那该怎么做呢? 在网上搜索 ...

  7. Android弹出选项框及指示箭头动画选择

     Android弹出选项框及指示箭头动画选择 Android原生的Spinner提供了下拉列表选项框,但在一些流行的APP中,原生的Spinner似乎不太受待见,而通常会有下图所示的下拉列表选项框 ...

  8. android点击按钮弹出输入框,android 弹出框(输入框和选择框)

    1.输入框: final EditText inputServer = new EditText(this); inputServer.setFilters(new InputFilter[]{new ...

  9. android动态设置软键盘弹出模式,Android 弹出软键盘所遇到的坑及解决方法

    重要代码: //1.此layout作为最外层的layout: //2.设置需要调整的view: setAdjustView(View view); //3.如果需要控制输入框的显示与隐藏,可以实现On ...

最新文章

  1. 使用grep过滤make的输出内容
  2. java五子棋用到的类_JAVA五子棋用到的知识点以及方法类有哪些?
  3. 物理化学 相平衡
  4. 程序员的自我进化:终于明白试图依靠跳槽和转行解决自身问题的,只会越来越差
  5. shell--基本语法
  6. 结构体struct的定义和使用
  7. linux 让暂停的进程恢复,Linux 下进程的挂起和恢复命令
  8. 在Pandas中直接加载MongoDB的数据
  9. Adopt Open JDK官方文档(五) Docker镜像
  10. NoSQL数据库的安装和使用
  11. 机器视觉及视觉传感器
  12. CodeSmith(1):使用和语法简介
  13. bat的errorlevel || bat判断语句是否执行成功
  14. 黑盒测试——边界值分析
  15. 内容创业,真的是“唯快不破”么?
  16. 自动化接口实战(一)
  17. WebAI.js:一个简单的网页前端 AI 模型部署工具
  18. OSG_64位动态链接库+静态链接库的使用
  19. 定位推送分享轻社交网络平台《足迹》——数据库设计
  20. 适合编程初学者的开源项目:小游戏2048(微信小程序版)

热门文章

  1. python 爬取svg数据_python处理svg数据
  2. SLAM综述之Lidar SLAM
  3. Node.js中的express框架,修改内容后自动更新(免重启),express热更新
  4. Revit LT 2022基本培训 Revit LT 2022 Essential Training
  5. c语言中volatile关键字的作用
  6. NVME CLI -- nvme 命令查看NVME设备内部状态
  7. 二叉树:路径之和 Path Sum
  8. Linux添加用户组和添加用户
  9. 洛谷 3519 bzoj 2213 Difference
  10. 使用μJava进行变异体测试