您的位置:首页 > 其它

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

2017-07-26 14:28 507 查看

一、本类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);
}

cead
} 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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: