Fragment懒加载(四) 与 EditText在PopupWindow上的BUG

简介: 这篇讲两个内容,因为感觉内容都太少了,所以就合起来写一篇算了。一.Fragment懒加载(四)对Fragment的封装我之前写过一篇文章说过要实现Fragment的懒加载,要定义3个参数,如果进行懒更新的话还要加一个参数,所以想想如果你的每个fragment都要定义4个参数,至少我觉得这样的代码扩展性不是很好,所以我就写了个LazyFragment对懒加载的操作进行封装。

这篇讲两个内容,因为感觉内容都太少了,所以就合起来写一篇算了。

一.Fragment懒加载(四)对Fragment的封装

我之前写过一篇文章说过要实现Fragment的懒加载,要定义3个参数,如果进行懒更新的话还要加一个参数,所以想想如果你的每个fragment都要定义4个参数,至少我觉得这样的代码扩展性不是很好,所以我就写了个LazyFragment对懒加载的操作进行封装。

顺便一提我对“懒”的使用:
我在项目中大量的使用了懒加载和懒更新,可以说我觉得这个思想非常的爽,我这边项目就我这个端做了懒加载,比如你有一个viewpager有3个fragment,其它端的操作是如果更新的话,这3个页面都要重新请求一次数据,而我这边用了懒更新后,我可以实现两个功能,一是只在切换页面后才进行数据重写加载,二是我可以很方便的选择只有某个Fragment进行懒更新,那就非常的爽啊。

话不多说,直接上代码,只要继承你原本写的Fragment基类,然后让其它类继承LazyFragment就行

public abstract class LazyFragment extends BaseFragment{

    //定义3个布尔值来做懒加载的判断
    private boolean isFristShowFragment = true;
    private boolean isVisibleToUser;
    private boolean isInitView = false;  // 是否执行过initview
    //懒加载
    private boolean isNeedDelayedRequestAgain = false;
    /**
     *  防止ViewPager预加载而设置懒加载,该方法调用在onCreate前
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        this.isVisibleToUser = isVisibleToUser;
        if (isVisibleToUser && isFristShowFragment && isInitView){
            initView(rootView);
            return;
        }
        // 判断是否进行延迟更新
        if (isNeedDelayedRequestAgain && isVisibleToUser && !isFristShowFragment){
            isNeedDelayedRequestAgain = false;
            replaceSetData();
        }
    }

    @Override
    protected void initView(View view) {
        isInitView = true;
        // 显示并且第一次展示这个页面才进入判断
        if (isVisibleToUser && isFristShowFragment){
            isNeedDelayedRequestAgain = false;// 防止重复加载
            isFristShowFragment = false;
            fristInitView(rootView);
            fristToData();
        }
    }

    // 第一次初始化
    protected abstract void fristInitView(View rootView);
    // 第一次获取数据
    protected abstract void fristToData();
    // 懒加载时重新获取数据
    public void replaceSetData(){

    }


    @Override
    protected void setDataToView() {

    }

    public void setNeedDelayedRequestAgain(boolean needDelayedRequestAgain) {
        isNeedDelayedRequestAgain = needDelayedRequestAgain;
    }
}

代码很简单,流程上的懒加载是封装好的,然后如果要使用懒更新功能的话。要在具体的fragment中重写replaceSetData()方法,在里面写上你的请求网络的操作就行。然后调用setNeedDelayedRequestAgain()就能传入是否进行懒更新。

二.EditText在Popupwindow中的BUG

我之前的弹框都是封装Popupwindow来使用的,自己封装后确实使用得非常方便,可谁知道竟然会出现了细微的BUG,这让我心疼不已,其实我很不明白为什么谷歌对弹框要推出这么多个实现方法,也许是我太菜了,无法理解谷歌的良苦用心。

回头说说这个BUG,就是在Popupwindow使用EditText的时候,无法实现长按复制粘贴功能,这个功能叫做selection markers。
我感觉我之前白封装了,在网上查阅了大量的资料包括stackoverflow,都只说了一句话,没救了,用DialogFragment代替。

以后写弹框用DialogFragment
以后写弹框用DialogFragment
以后写弹框用DialogFragment
重要的事说三遍。

目录
相关文章
|
26天前
activity中加载fragment的控件 在fragment 中调用activity中的控件
activity中加载fragment的控件 在fragment 中调用activity中的控件
10 0
|
26天前
|
Android开发
RecyclerView的简单使用在activity和fragment中
RecyclerView的简单使用在activity和fragment中
18 0
|
9月前
|
XML 缓存 Android开发
QMUI实战(二)—Activity 和 Fragment,我们该选择谁?
在一开始,官方只提供了 Activity 来作为 UI 界面的载体,因此我们也别无选择,只能用它。而在 Android 3.0 后,Fragment 也面世了,它一开始是用于适配平板的,以邮件列表与详情的适配为例,手机端够小,因此开始展示列表,点击进入详情,而平板够大,则可以列表显示在左侧,详情显示在右侧,点击列表只是切换详情。对于这种适配场景,列表页和详情页必须在同一个 Activity 里了,而这便是我所知道的 Fragment 诞生的场景了。
116 0
|
11月前
|
XML Java 数据格式
Fragment底部导航栏
一个页面以微信为例,从上到下依次是状态栏,Activity顶部导航栏,Fragment,Activity底部导航栏。 每点击一个底部导航栏都会replace另一个Fragment。
41 0
|
11月前
|
XML Android开发 数据格式
Android 底部导航栏(二、自定义View+Fragment)
上一片文章用的是BottomNavigationView+Menu+Fragment,但是可能有时候需求不一样,menu的样式不太够,所以需要自定义View来实现。
|
容器
Fragment——底部导航栏的实现
本节开始我们会讲解一些Fragment在实际开发中的一些实例!而本节给大家讲解的是底部导航栏的实现!而基本的底部导航栏方法有很多种,比如全用TextView做,或者用RadioButton,又或者使用TabLayout + RadioButton,当然复杂的情况还是得走外层套布局的方法!本节我们用TextView来做一个底部导航栏的效果,也熟悉下Fragment的使用!
73 0
|
XML 移动开发 Android开发
activity中加载fragment的控件]
fragment它自己的中文意思:碎片; 一个可以将activity拆分成几个完全独立封装的可重用的组件,每个组件有自己的生命周期和ui布局。
245 1
activity中加载fragment的控件]
Android7.0 分屏 Activity 与 Fragment 生命周期(二)
      小菜前段时间整理过一些关于 Activity 与 Fragment 生命周期的小博文:Android7.0 分屏下 Activity 与 Fragment 生命周期(一) 和 我们真的了解 Activity 与 Fragment 的生命周期吗?今天继续这个话题,稍稍整理一下,在 Android7.0 分屏情况下,两个 Activity 的生命周期之间的执行顺序,且同样暂不研究横竖屏切换时的过程。
1324 0
|
Android开发
Android Fragment懒加载
懒加载思路 在Fragment布局创建的时候调用懒加载方法,创建之后将isViewPrepared设置为true。 /**标记Fragment视图是否已经初始化完毕*/ private boolean isViewPrepared;...
1223 0