BaseActivityコード


パッケージcom.test.mvp.mvpdemo.mvp.v5.basemvp。

輸入android.content.Context;
輸入android.os.Bundle;
輸入android.support.annotation.IdRes。
輸入android.support.annotation.Nullable;
輸入android.support.v7.app.AppCompatActivity。
輸入android.view.View。

輸入com.test.mvp.mvpdemo.mvp.v5.inject.InjectPresenter。

インポートをjava.lang.reflect.Field;
輸入はjava.util.ArrayList;
輸入はjava.util.List;

パブリック抽象クラスBaseActivity <PがIBasePresenterを拡張は、> AppCompatActivityがIBaseView {実装延び

プライベートP mPresenterと、

/ **
*保存使用注解的プレゼンター、用于解绑
* /
プライベートリスト<BasePresenter> mInjectPresenters。

保護された抽象無効initLayout(@NullableバンドルsavedInstanceState);

保護された抽象P setPresenter()。

保護された抽象無効initViews();

保護された抽象無効initData();


@SuppressWarnings( "SameParameterValueは")
<Tビューを拡張> T $(@ IdRes int型のviewId){保護された
(のviewId)findViewByIdを返します。
}

@SuppressWarnings({ "未チェック"、 "TryWithIdenticalCatches"})
@Overrideは、
ボイドのonCreate(@NullableバンドルsavedInstanceState){保護
super.onCreate(savedInstanceState)を、

initLayout(savedInstanceState)。

/ **
*实例化和绑定P层
* /
this.mPresenter = setPresenter()。
もし(mPresenter!= NULL){
this.mPresenter.attach(この);
}

mInjectPresenters =新規のArrayList <>();

//获得已经申明的变量、包括私有的
分野[]フィールド= this.getClass()getDeclaredFields()。
(項目フィールド:フィールド)のために{
//获取变量上面的注解类型
InjectPresenter injectPresenter = field.getAnnotation(InjectPresenter.class)。
(injectPresenter!= null)の場合には{
{しようと
、クラスを<?BasePresenter> =入力延びfield.getType()(?<クラスBasePresenterは>延び);
BasePresenter mInjectPresenter = type.newInstance()。
mInjectPresenter.attach(この);
field.setAccessible(真の);
field.set(これ、mInjectPresenter)。
mInjectPresenters.add(mInjectPresenter)。
}キャッチ(IllegalAccessExceptionが電子){
e.printStackTrace();
}キャッチ(ないInstantiationException電子){
e.printStackTrace();
}キャッチ(れるClassCastException E){
e.printStackTrace();
;:新しいのRuntimeExceptionをスロー(「BasePresenterサブクラス必見クラス拡張します」)
}
}
}

initViews()。
initData();
}

@Overrideは
ボイドonDestroy(){保護
super.onDestroyを();
/ **
*解绑、避免内存泄漏
* /
this.mPresenter.detach();
this.mPresenter = NULL;
{(mInjectPresenters BasePresenterプレゼンター)用
)(presenter.detach。
}
mInjectPresenters.clear()。
mInjectPresenters = NULL;
}

@Override
公共コンテキストのgetContext(){
これを返します。
}

パブリックP getPresenter(http://www.my516.com){
mPresenterを返します。
}
}
--------------------- 

おすすめ

転載: www.cnblogs.com/hyhy904/p/11299067.html