MVP项目研究——BaseActivity实现基本数据的绑定与释放

来源:互联网 发布:mac音频播放器 编辑:程序博客网 时间:2024/06/07 21:25

一、本类API


    • 泛型传入Presenter(继承自IPresenter)
    • 继承RxAppCompatActivity进行生命周期管理
    • 实现IActivity
  • 方法
    • onCreate butternife的绑定
    • onDestroy()释放资源
    • useEventBus()默认true
    • useFragment() 默认true

在创建BaseActivity前,我们先创建一个Presenter的接口和Activity的接口

二、创建interface IPresenter,IActivity

public interface IPresenter {    void onStart();    void onDestroy();}//下面是IActivity的接口package com.daqsoft.ybarms.base.delegate;import android.os.Bundle;/** * Created by yanbo on 2017/7/26. * Activity的接口包括 * 1、useEventBus() * 2、initView(Bundle savedInstanceState)     *      返回0则不会调用setContentView * 3、initData(Bundle savedInstanceState) * 4、useFragment() *      这个Activity是否会使用Fragment,框架会根据这个属性判断是否注册FragmentManager.FragmentLifecycleCallbacks *      如果返回false那意味着这个Activity不需要绑定Fragment,那你再在这个Activity中绑定继承于BaseFragment的Fragment将不起任何作用 *  */public interface IActivity {    boolean useFragment();    boolean useEventBus();    int initView(Bundle savedInstanceState);    void initData(Bundle savedInstanceState);}

三、 BaseActivity代码

package com.daqsoft.ybarms.base;import android.content.Context;import android.os.Bundle;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;import com.daqsoft.ybarms.base.delegate.IActivity;import com.daqsoft.ybarms.mvp.IPresenter;import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;import javax.inject.Inject;import butterknife.ButterKnife;import butterknife.Unbinder;/** * Created by yanbo on 2017/7/26. * 泛型传入Presenter(继承自IPresenter) * 继承RxAppCompatActivity进行生命周期管理 * 实现IActivity */public abstract class BaseActivity<P extends IPresenter> extends RxAppCompatActivity implements IActivity {    private Unbinder mUnbinder;    @Inject    protected P mPresenter;    /**     * -------------------------------------------------butternife的绑定     */    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        try {            int layoutResID = initView(savedInstanceState);            if (layoutResID != 0) {//如果initView返回0,框架则不会调用setContentView(),当然也不会 Bind ButterKnife                setContentView(layoutResID);                //绑定到butterknife                mUnbinder = ButterKnife.bind(this);            }        } catch (Exception e) {            e.printStackTrace();        }        initData(savedInstanceState);    }    /**     * -------------------------------------------------的释放资源     * butternife     * mPresenter     */    @Override    protected void onDestroy() {        super.onDestroy();        if (mUnbinder != null && mUnbinder != Unbinder.EMPTY)            mUnbinder.unbind();        this.mUnbinder = null;        if (mPresenter != null)            mPresenter.onDestroy();//释放资源        this.mPresenter = null;    }    /**     * 是否使用eventBus,默认为使用(true),     *     * @return     */    @Override    public boolean useEventBus() {        return true;    }    /**     * 这个Activity是否会使用Fragment,框架会根据这个属性判断是否注册{android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks}     * 如果返回false,那意味着这个Activity不需要绑定Fragment,那你再在这个Activity中绑定继承于 {BaseFragment} 的Fragment将不起任何作用     *     * @return     */    @Override    public boolean useFragment() {        return true;    }}
原创粉丝点击