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; } }
相关文章推荐
- js mvvm:闲来无事,实现一个只具最基本数据双向绑定的mvvm
- solr 7+tomcat 8 + mysql实现solr 7基本使用(安装、集成中文分词器、定时同步数据库数据以及项目集成)
- as3 非flex项目实现数据绑定
- 一句代码实现批量“.NET研究”数据绑定[下篇]
- 一“.NET研究”句代码实现批量数据绑定[下篇]
- 一句代码实现“.NET研究”批量数据绑定[上篇]
- 数据绑定组件实现
- (转贴)实现带有数据绑定的客户端脚本控制的二级联动菜单
- 教您如何用Zeus实现XML-Java的数据绑定
- 在ASP.NET 2.0中实现数据的绑定
- 使用Repeater实现自定义多列数据绑定
- 项目实战之中小网站数据缓存的设计与实现
- 使用数据绑定实现多窗口间的数据同步
- Ajax实现无刷新的获取数据并绑定到GridView,以及无刷新更新数据[转]
- Ajax实现无刷新的获取数据并绑定到GridView,以及无刷新更新数据
- (转贴)使用Repeater实现自定义多列数据绑定
- Delphi与.Net交叉调用研究(1) 基本数据类型一致性测试
- 在部署项目时实现自动安装FrameWork及数据访问部件
- 使用Repeater实现自定义多列数据绑定
- 在部署项目时实现自动安装FrameWork及数据访问部件