ViewPager+Fragment实现选项卡,并且完美解决刷新和替换Fragment的问题

本文主要是介绍ViewPager+Fragment实现选项卡,并且完美解决刷新和替换Fragment的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先是ViewPager + Fragment实现选项卡,这个大家可以看貌似掉线的Android开发技巧——实现底部图标文字的导航栏(已更新)

我主要来写下如何解决刷新和替换Fragment的问题,直接写方法好了。其他的大家直接下载文末的Demo。

动态刷新ViewPager的Fragment

第一步:在MainActivity中新建了一个类继承自FragmentPagerAdapter,在其子类中重写getItemPosition方法,这个方法非常重要。

@Override
public int getItemPosition(Object object) {if (object instanceof Fragment0) {Fragment1 s= new Fragment1();
        s.updateFragment1(param)return POSITION_NONE;;
    }else if (object instanceof Fragment1) {((Fragment1) object).updateFragment1(param);
        return POSITION_NONE;
    }return super.getItemPosition(object);
}

在这个方法中,object是一个item,其实就是一个Fragment,判断它是否是Fragment的实例,因为我只需要更新Fragment1,所有第0页和第1页都是更新Fragment1的操作。最重要的是要return POSITION_NONE,这个表示需要刷新,另一个参数是POSITION_UNCHANGED,这个表示不需要刷新,所以这里必须返回return POSITION_NONE,少了这句就不会刷新了。

第二步:侧滑栏选项点击事件。

public boolean onNavigationItemSelected(MenuItem item) {// Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_camera) {// Handle the camera action
    } else if (id == R.id.nav_gallery) {param = "第一种更新"; //需要传递到Fragment1的参数。通过这个参数刷新Fragment1的视图。
        mIndicator.setCurrentItem(1); //跳转到Fragment1
        adapter.notifyDataSetChanged(); //通知更新,它会跳转到getItemPosition()方法,所以必不可少。
    } else if (id == R.id.nav_slideshow) {param = "第二种更新";
        mIndicator.setCurrentItem(1);
        adapter.notifyDataSetChanged();
    } 
最后一个notifyDataSetChanged()最为重要,只有通过FragmentPagerAdapter的对象调用了它才会通知到getItemPosition方法。

第三步:不能屏蔽父类的destroyItem()方法,不能覆写此方法并去掉super方法,否则不能刷新。有的人可能把它屏蔽了,于是就在刚才的Click方法中加入

getSupportFragmentManager().beginTransaction().remove(getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.view_pager + ":" + 1)).commit();

假设我在Fragment1中连续两次更新视图,那么视图将报空,因为点击的时候销毁了,所以这句不能用。


以上四步走完,应该可以完美刷新了。特意做了个Demo,大家有什么不理解的直接看源码吧。ViewPager更新刷新替换Fragment的Demo

注意:用Android Studio打开之前,必须改两个地方,首先,项目根目录的build.gradle需要改成你自己的版本,查看你其他能打开的项目就能看见,复制替换即可,然后是gradle/wrapper目录,将gradle-wrapper.properties中的

distributionUrl=https\://services.gradle.org/distributions/gradle-3.4-all.zip
改成你自己的。目录打不开的同学请删除项目后重新导入。

另外我建了一个安卓开发交流群,大家可以在里面交流:安卓开发交流群 群号:301919302

这篇关于ViewPager+Fragment实现选项卡,并且完美解决刷新和替换Fragment的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102198

相关文章

Java 中实现异步的多种方式

《Java中实现异步的多种方式》文章介绍了Java中实现异步处理的几种常见方式,每种方式都有其特点和适用场景,通过选择合适的异步处理方式,可以提高程序的性能和可维护性,感兴趣的朋友一起看看吧... 目录1. 线程池(ExecutorService)2. CompletableFuture3. ForkJoi

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

python dict转换成json格式的实现

《pythondict转换成json格式的实现》本文主要介绍了pythondict转换成json格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 一开始你变成字典格式data = [ { 'a' : 1, 'b' : 2, 'c编程' : 3,

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

Java报NoClassDefFoundError异常的原因及解决

《Java报NoClassDefFoundError异常的原因及解决》在Java开发过程中,java.lang.NoClassDefFoundError是一个令人头疼的运行时错误,本文将深入探讨这一问... 目录一、问题分析二、报错原因三、解决思路四、常见场景及原因五、深入解决思路六、预http://www