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
重要的事说三遍。

目录
相关文章
|
4月前
|
Android开发
RecyclerView的简单使用在activity和fragment中
RecyclerView的简单使用在activity和fragment中
77 0
|
4月前
activity中加载fragment的控件 在fragment 中调用activity中的控件
activity中加载fragment的控件 在fragment 中调用activity中的控件
33 0
|
Android开发
Android 中使用RadioGroup+Fragment实现底部导航栏的功能
Android 中使用RadioGroup+Fragment实现底部导航栏的功能
91 0
|
容器
Fragment——底部导航栏的实现
本节开始我们会讲解一些Fragment在实际开发中的一些实例!而本节给大家讲解的是底部导航栏的实现!而基本的底部导航栏方法有很多种,比如全用TextView做,或者用RadioButton,又或者使用TabLayout + RadioButton,当然复杂的情况还是得走外层套布局的方法!本节我们用TextView来做一个底部导航栏的效果,也熟悉下Fragment的使用!
95 0
|
XML Android开发 数据格式
Android 底部导航栏(三、ViewPager+TabLayout+Fragment)简单易懂
底部导航栏在Android应用中随处可见,今天使用ViewPager+TabLayout+Fragment这三个控件来实现此功能。 前面使用了另外两个方法来实现导航栏,不过我还是更喜欢Viewpager,代码也少,毕竟前两个不能左右滑动。
|
XML Java 数据格式
Fragment底部导航栏
一个页面以微信为例,从上到下依次是状态栏,Activity顶部导航栏,Fragment,Activity底部导航栏。 每点击一个底部导航栏都会replace另一个Fragment。
64 0
|
XML Android开发 数据格式
Android 底部导航栏(四、ViewPager+RadioGroup+Fragment)简单易懂
底部导航栏在Android应用中随处可见,今天使用ViewPager+RadioGroup+Fragment这三个控件来实现此功能。前面写了有三种实现方式,有兴趣可以去看看
|
XML 移动开发 Android开发
activity中加载fragment的控件]
fragment它自己的中文意思:碎片; 一个可以将activity拆分成几个完全独立封装的可重用的组件,每个组件有自己的生命周期和ui布局。
283 1
activity中加载fragment的控件]
|
Android开发
Android Fragment懒加载
懒加载思路 在Fragment布局创建的时候调用懒加载方法,创建之后将isViewPrepared设置为true。 /**标记Fragment视图是否已经初始化完毕*/ private boolean isViewPrepared;...
1246 0