美文网首页Android开发Android技术知识Android开发
我理解的BaseActivityBaseFragment应该这么

我理解的BaseActivityBaseFragment应该这么

作者: 卖臭豆腐的王致和 | 来源:发表于2018-06-20 09:40 被阅读116次
转载请注明原创出处,谢谢!

我的BaseActivity是有一个弊端的,因为用了反射的关系,所以在性能上会有一定的影响,但问题不是很大,可以忽略不计,当然,如果你对性能要求特别高,不建议使用。

为什么要这么写?

  • 不想每次都写setContentView(layoutId)方法,所以就用一个反射的方式,来减少每次写的代码。
  • 养成良好的编码习惯,布局命名规范。
  • 让自己的代码,具有自己的风格。
  • 是不是显得技术会很厉害???哈哈哈

为什么不像别人一样,把log,toast,intent什么的也写进去?

  • 这些东西应该有专门的Utils去管理,例如xUtils就不错,实在不想写,可以当Ctrl+C/V大神啊,而不是臃肿的放在BaseActivity中。
  • 竟可能的少些一些代码,会让别人看着舒服!

BaseActivity核心代码

用了这个BaseActivity,你只要将布局的xml命名为layout_abc,java命名为AbcActivity,它就会自动加载布局,而不需要每次setContentView了。(注意大小写)

public abstract class BaseActivity extends AppCompatActivity {
    @Override
    //  ***这里要用一个参数的onCreate,两个参数是不会显示页面内容的***这个坑我踩过!记一下。。
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 尝试调用setContentView(layoutId)方法
        // 尝试根据类名(例如:MainActivity)--->资源文件的名字(activity_main)
        String clazzName = this.getClass().getSimpleName();// MainAcitivity
        if (clazzName.contains("Activity")) {
            String activityName = clazzName.substring(0,
                    clazzName.indexOf("Activity")).toLowerCase(Locale.US);// main
            String resName = "activity_" + activityName;// activity_main
            // 根据resName找到其对应的resId(根据activity_main--->R.layout.activity_main)
            int resId = getResources().getIdentifier(resName, "layout",
                    getPackageName());
            if (resId != 0) {
                // 确实找到了资源ID(R.layout.activity_main)
                setContentView(resId);
            }
        }
        initView();
        initListener();
        MyApp.addActivity(this);// 将正在创建的活动添加到活动管理器里
    }

    protected abstract void initView();

    protected abstract void initListener();

    @Override
    protected void onDestroy() {
        super.onDestroy();
        MyApp.removeActivity(this);// 将一个要销毁的活动从活动管理器里移除
    }
}

同样BaseFragment也可以

public abstract class BaseFragment extends Fragment {
    protected View contentView = null;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        // SettingFragment;
        String clazzName = getClass().getSimpleName();
        if (clazzName.contains("Fragment")) {
            // "标准"的布局文件命名应该是:fragment_setting
            String layoutName = clazzName.substring(0,
                    clazzName.indexOf("Fragment")).toLowerCase(Locale.US);
            layoutName = "fragment_" + layoutName;
            // R.layout.fragment_setting
            int resId = getResources().getIdentifier(layoutName, "layout",
                    getActivity().getPackageName());

            if (resId != 0) {
                contentView = inflater.inflate(resId, container, false);// 利用反射,加载布局
            }
        }
        return contentView;
    }
    
    @Override
    public void onStart() {
        super.onStart();
        init();
    }
    
    public void init() {// 如果有特殊原因,反射没有成功,你可以在这里,二次加载
        // No-OP 钩子方法
    }
}

相关文章

  • 我理解的BaseActivityBaseFragment应该这么

    转载请注明原创出处,谢谢! GitHub: @Ricco 我的BaseActivity是有一个弊端的,因为用了反射...

  • 停止争论谁对谁错

    日常聊天里,我经常会发生以下形式的对话: A:我觉得xxx这应该这么理解B: 不不不,这样不对,应该这样理解A: ...

  • 《我的前半生》是不是应该这么理解?

    最近的热剧《我的前半生》,在朋友圈被吵得沸沸扬扬,最为亦舒的老读者,赶紧把拉下的剧集集中补了一下。然而,此剧想表达...

  • 探索关键词 receive

    再谈关键字 receive 官方解释: 我之前的理解的用法是: 当时今天我做了一个实验,我觉得不应该这么理解,re...

  • 放生,我是这么理解的

    早晨,起的较早,恰好小儿子也早早醒来。看到他高高兴兴的样子,突然有一个想法,领他一块儿出去溜达一圈儿。 给他们灌了...

  • 给小花的第一封信

    小花,也许是我这些日子太多空闲时间,总想着你能多点陪我聊天,是我不好,我应该多点充实自己,应该多点理解你这么辛苦工...

  • 谈违天道

    有没有天道。我的理解应该是自然规律。也可以这么理解,只要存在的东西,它就是自然的,其存在,就有其存在的理由——意思...

  • 我的生活应该这么简单

    我的生活应该这么简单 想哭的时候哭 想笑的时候笑 悠闲的时候看着天听着歌 繁忙的时候为下顿饭努力张罗。

  • 元认知——《通往财富自由之路》

    元认知是堆自己的思考构成的认知与理解。 过程应该是: 哦,我原来是这么想的……恩?我这么想难道是不对的吗?啊!我应...

  • 我是这么理解“孝”

    学而篇第十一则: 原文 子曰:“父在,观其志;父没,观其行;三年无改于父之道,可谓孝矣。” 直译: 孔子说;“当他...

网友评论

  • 78983551cc90:老哥不用As的快捷键创建Activity么
    卖臭豆腐的王致和:@设计师吴彦祖 咱俩说的可能不是一个事。。。
    78983551cc90:@卖臭豆腐的王致和 AndroidStudio创建文件都有快捷键的, 平台差异性可能有所不同, 我就不说了, 会自动创建类和Layout以及在AndroidManifest注册
    卖臭豆腐的王致和:@设计师吴彦祖 ???什么快捷键?

本文标题:我理解的BaseActivityBaseFragment应该这么

本文链接:https://www.haomeiwen.com/subject/rsfmeftx.html