客户端封装Fragment和Activity

news/2024/7/7 16:13:57

一、封装activity

public abstract class Activity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initWindows();
        if (initargs(getIntent().getExtras())) {
            // 得到界面Id并设置到Activity界面中
            int layoutId = getContentLayoutId();
            setContentView(layoutId);
            initWidget();
            initData();
        } else {
            finish();
        }
    }

    /**
     * 初始化窗口
     */
    protected void initWindows() {

    }

    /**
     * 初始化相关参数
     *
     * @param bundle 参数Bundle
     * @return 如果参数正确返回True,错误返回False
     */
    protected boolean initargs(Bundle bundle) {
        return true;
    }

    /**
     * 得到当前界面的资源文件Id
     *
     * @return 资源文件Id
     */
    protected abstract int getContentLayoutId();

    /**
     * 初始化控件
     */
    protected void initWidget() {
        ButterKnife.bind(this);
    }

    /**
     * 初始化数据
     */
    protected void initData() {

    }
    // 当点击界面导航返回时,Finish当前界面

    @Override
    public boolean onSupportNavigateUp() {
        finish();
        return super.onSupportNavigateUp();
    }

    @Override
    public void onBackPressed() {
        // 得到当前Activity下的所有Fragment

        List<android.support.v4.app.Fragment> fragments = getSupportFragmentManager().getFragments();
        // 判断是否为空
        if (fragments != null && fragments.size() > 0) {
            for (Fragment fragment : fragments) {
                // 判断是否为我们能够处理的Fragment类型
                if (fragment instanceof italker.yijia.net.common.app.Fragment) {
                    // 判断是否拦截了返回按钮
                    if (((italker.yijia.net.common.app.Fragment) fragment).onBackPressed()) {
                        // 如果有直接Return
                        return;
                    }
                }
            }
        }

        super.onBackPressed();
        finish();

    }
}
二、封装fragment

public abstract class Fragment extends android.support.v4.app.Fragment {
private View mRoot;
    private Unbinder mRootUnBinder ;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        // 初始化参数
        initargs(getArguments());
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (mRoot == null) {
            int layId = getContentLayoutId();
            // 初始化当前的跟布局,但是不在创建时就添加到container里边
            View root = inflater.inflate(layId, container, false);
            initWidget(root);
            mRoot = root;
        } else {
            if (mRoot.getParent() != null) {
                // 把当前Root从其父控件中移除
                ((ViewGroup) mRoot.getParent()).removeView(mRoot);
            }
        }

        return mRoot;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        initData();
    }
    /**
     * 初始化数据
     */
    protected void initData() {
    }
    /**
     * 初始化相关参数
     */
    protected void initargs(Bundle bundle){

    }
    /**
     * 得到当前界面的资源文件Id
     *
     * @return 资源文件Id
     */
    protected abstract int getContentLayoutId();
    /**
     * 初始化控件
     */
    protected void initWidget(View view){
        mRootUnBinder  = ButterKnife.bind(this, view);
    }
    /**
     * 返回按键触发时调用
     *
     * @return 返回True代表我已处理返回逻辑,Activity不用自己finish     * 返回False代表我没有处理逻辑,Activity自己走自己的逻辑
     */
    public boolean onBackPressed(){
        return false;
    }
}

三、封装相关依赖版本,首先选择项目Porject:ITakler的build.gradle

ext{
    //版本号相关
    versionCode=1;
    versionName='1.0.0'
    //相关依赖版本
    supportVersion='24.2.1'
    butterknifeVersion='8.5.1'
}
四、选择整个项目的Module:app的build.gradle

compile "com.android.support:appcompat-v7:$rootProject.ext.supportVersion"
compile "com.jakewharton:butterknife:$rootProject.ext.butterknifeVersion"
annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.ext.butterknifeVersion"
五、选择Module:common的build.gradle

compile "com.jakewharton:butterknife:$rootProject.ext.butterknifeVersion"
annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.ext.butterknifeVersion"
compile "com.android.support:appcompat-v7:$rootProject.ext.supportVersion"


http://www.niftyadmin.cn/n/3649310.html

相关文章

Android Studio中的手机通讯录开发

Android Studio中的手机通讯录&#xff0c;包含功能&#xff08;按首字母排序&#xff0c;动态添加&#xff09; 第一次写博客&#xff0c;也刚踏入工作&#xff0c;想着把自己在项目中遇到的问题&#xff0c;以及自己在工作中所做的项目记录下来&#xff0c;方便以后自己查找…

redis排序_如何在Redis中管理排序集

redis排序介绍 (Introduction) Redis is an open-source, in-memory key-value data store. In Redis, sorted sets are a data type similar to sets in that both are non repeating groups of strings. The difference is that each member of a sorted set is associated w…

Android版本和API Level的对应关系

在开发Android时&#xff0c;老是不知道Android版本号和对应API level&#xff0c;这个问题真是麻烦&#xff0c;我们在发布声波传输SDK时也遇到这样的问题&#xff0c;版本号是对外发布的版本号&#xff0c;一般都是主版本号.子版本号.修正版本号的命名规则&#xff0c;说白了…

[dotNET]使用HttpWebRequest请求远端服务器时如何加载SSL证书

使用HttpWebRequest请求远端服务器时如何加载SSL证书编写者&#xff1a;郑昀UltraPower首先加上引用“System.Security.DLL”&#xff0c;其次在工程中using System.Security.Cryptography.X509Certificates;这样就可以使用“X509Certificate Class”了&#xff0c;它的定义参见…

JDBC的使用(一)

Java 中的数据存储技术 在Java中&#xff0c;数据库存取技术可分为如下几类&#xff1a; ①JDBC直接访问数据库 ②JDO技术 ③第三方O/R工具&#xff0c;如Hibernate, ibatis 等 JDBC是java访问数据库的基石&#xff0c;JDO, Hibernate等…

若依项目(前后端分离)

最近在基于若依项目二次开发中&#xff0c;遇到表设计问题&#xff0c;然后看了若依想项目前后端分离视频中&#xff0c;也是不太懂表的设计问题

Android常用Adapter代码例子

ArrayAdapter   总是感觉写自己的博客才更能够学到东西&#xff0c;网上尽管有很多好的资料&#xff0c;但是参差不齐&#xff0c;需要浪费大量时间才能够找到最需要的&#xff0c;索性写自己最需要的东西。 Adapter是适配器的意思&#xff0c;在Android中大量的使用到了List…

node中的数据持久化之mongoDB

一、什么是mongoDB MongoDB是一种开源的非关系型数据库&#xff0c;正如它的名字所表示的&#xff0c;MongoDB支持的数据结构非常松散&#xff0c;是一种以bson格式&#xff08;一种json的存储形式&#xff09;的文档存储方式为主&#xff0c;支持的数据结构类型更加丰富的NoS…