Android MVP入門から進級へ-Dagger 2を結合
5996 ワード
前言
本シリーズは3編:Android MVP入門から進級へ-簡単入門Android MVP入門から進級へ-Dagger 2 Android MVP入門から進級へ-システムフレームワーク統合(完結)
昨日、1篇のmvp入門フレームワークの構築文章Android MVP入門から進級まで-簡単入門簡単な例を通じて、mvpの簡単な使用を紹介して、今日私達は依然としてdemoからmvpモードを紹介して注釈フレームワークDagger 2の使用を結合して、本文はdagger 2の使い方を紹介しないことに注意して、dagger 2がmvpフレームワークを結合してどのように更に結合するかだけを簡単に紹介します.dagger 2の使い方が分からない場合は、公式ドキュメントDagger 2を参照するか、以下の文章を読んでください:Dagger 2入門、初心者の角度でdagger 2詳しく説明します.ここでは、以上の文章の著者に感謝し、良い学習ガイドを提供してください.
Dagger 2を使うメリットは何ですか?
話があまりないので、demoを書き始めましょう.
依存の追加
moduleのbuild.gradleにDagger 2の依存を追加
アプリケーションのインスタンスを提供するためのAppModuleクラスの書き込み
書き込みAppComponentインタフェースAppModuleの管理
Activity Moduleインタフェースの書き込みActivityインスタンスの提供
Activity Componentインタフェースを書き込み注入に依存するActivityを登録
書くApp類
LoginActivityでnew LoginPresenterを削除LoginPresenterに注記@Injectを追加
修正後のLoginPresenterをもう一度見て
ここまで私たちのdemoの大まかな内容はすでに終わって、とても簡単で、いくつかの簡単な注釈で、私たちはPresenterとViewの完全なデカップリングを実現して、
まとめ
この2日間の総括を通じて、私たちのチームのmvpと協力daggerは一定の理解を持っていて、もとはmvp+daggerのアーキテクチャの構築がこんなに簡単だと思っています.はい、私たちの学者にとって、確かに一定の収穫がありますが、私たちのプロジェクトはまだ簡単で、まだネットの要求に関連していません.私たちは会社でプロジェクトをするのにどうしてネットの要求が欠けているのか、これは少なくありません.そこで次の記事ではAndroid MVP入門からステップアップへのシステムフレームワーク統合(完結)についてまとめます
この文章はオリジナルブログです.転載は出典を明記してください.
本シリーズは3編:Android MVP入門から進級へ-簡単入門Android MVP入門から進級へ-Dagger 2 Android MVP入門から進級へ-システムフレームワーク統合(完結)
昨日、1篇のmvp入門フレームワークの構築文章Android MVP入門から進級まで-簡単入門簡単な例を通じて、mvpの簡単な使用を紹介して、今日私達は依然としてdemoからmvpモードを紹介して注釈フレームワークDagger 2の使用を結合して、本文はdagger 2の使い方を紹介しないことに注意して、dagger 2がmvpフレームワークを結合してどのように更に結合するかだけを簡単に紹介します.dagger 2の使い方が分からない場合は、公式ドキュメントDagger 2を参照するか、以下の文章を読んでください:Dagger 2入門、初心者の角度でdagger 2詳しく説明します.ここでは、以上の文章の著者に感謝し、良い学習ガイドを提供してください.
Dagger 2を使うメリットは何ですか?
1. 、
2.
3.
話があまりないので、demoを書き始めましょう.
依存の追加
moduleのbuild.gradleにDagger 2の依存を追加
implementation 'com.google.dagger:dagger:2.16'
implementation 'com.google.dagger:dagger-android:2.16'
implementation 'com.google.dagger:dagger-android-support:2.16'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.16'
annotationProcessor 'com.google.dagger:dagger-compiler:2.16'
アプリケーションのインスタンスを提供するためのAppModuleクラスの書き込み
/**
* @desc AppModule
* @author Marlon
* @date 2018/10/9
*/
@Module
public class AppModule {
private final App application;
public AppModule(App application) {
this.application = application;
}
@Provides
@Singleton
App provideApplicationContext() {
return application;
}
}
書き込みAppComponentインタフェースAppModuleの管理
/**
* @desc AppComponent Application
* @author Marlon
* @date 2018/10/9
*/
@Singleton
@Component(modules = {AppModule.class/*, HttpModule.class*/})
public interface AppComponent {
App getContext(); // App Context
// BaseApiService retrofitHelper(); // http ,
}
Activity Moduleインタフェースの書き込みActivityインスタンスの提供
/**
* @desc ActivityModule
* @author Marlon
* @date 2018/10/9
*/
@Module
public class ActivityModule {
private Activity mActivity;
public ActivityModule(Activity activity) {
this.mActivity = activity;
}
@Provides
@ActivityScope
public Activity provideActivity() {
return mActivity;
}
}
Activity Componentインタフェースを書き込み注入に依存するActivityを登録
/**
* @desc ActivityComponent Activity
* @author Marlon
* @date 2018/10/9
*/
@ActivityScope
@Component(dependencies = AppComponent.class, modules = ActivityModule.class)
public interface ActivityComponent {
Activity getActivity();
void inject(MainActivity mainActivity);// MainActivity
void inject(LoginActivity loginActivity);// LoginActivity
//TODO Activity
}
書くApp類
/**
* @desc App
* @author Marlon
* @date 2018/10/9
*/
public class App extends Application {
private static App instance;
public static AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static synchronized App getInstance() {
return instance;
}
public static AppComponent getAppComponent() {
if (appComponent == null) {
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(instance))
// .httpModule(new HttpModule()) module ,
.build();
}
return appComponent;
}
}
LoginActivityでnew LoginPresenterを削除LoginPresenterに注記@Injectを追加
/**
* @desc LoginActivity
* @author Marlon
* @date 2018/10/9
*/
public class LoginActivity extends AppCompatActivity implements LoginContract.View {
@Inject
LoginPresenter mPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
DaggerActivityComponent.builder().appComponent(App.getAppComponent()).activityModule(new ActivityModule(this)).build().inject(this);
mPresenter.attachView(this);
}
@Override
public void gotoMain() {
startActivity(new Intent(this,MainActivity.class));
}
@Override
public void showToast(String msg) {
Toast.makeText(this.getApplicationContext(),msg,Toast.LENGTH_SHORT).show();
}
public void onClickLogin(View view) {
mPresenter.login();
}
}
修正後のLoginPresenterをもう一度見て
/**
* @author Marlon
* @desc
* @date 2018/10/8
*/
public class LoginPresenter implements LoginContract.Presenter {
LoginActivity view;
@Inject
public LoginPresenter() {
}
@Override
public void login() {
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
view.showToast(" ");
view.gotoMain();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void attachView(LoginContract.View view) {
this.view = (LoginActivity) view;
}
@Override
public void detachView() {
this.view = null;
}
}
ここまで私たちのdemoの大まかな内容はすでに終わって、とても簡単で、いくつかの簡単な注釈で、私たちはPresenterとViewの完全なデカップリングを実現して、
new
キーワードを見ていないで、構造方法の中のパラメータも見ていないで、とてもすばらしいですか?このプロジェクトdemoはここにあります.もっと詳しい知識が入っています.必要なものがあれば調べてみてください.もしあなたに役に立つと思ったら、気をつけてください.何か問題があったら、フィードバックしてください.皆さん、一緒に勉強してください.本プロジェクトdemoは依然として公式googlesamples/android-architectureのtodo‑mvp‑dagger分岐を簡略化しています.私たちが普段開発していない注釈の大部分を除いて、十分なDagger 2の基礎があれば、公式demoを調べて、もっと多くの知識が待っていますよ.まとめ
この2日間の総括を通じて、私たちのチームのmvpと協力daggerは一定の理解を持っていて、もとはmvp+daggerのアーキテクチャの構築がこんなに簡単だと思っています.はい、私たちの学者にとって、確かに一定の収穫がありますが、私たちのプロジェクトはまだ簡単で、まだネットの要求に関連していません.私たちは会社でプロジェクトをするのにどうしてネットの要求が欠けているのか、これは少なくありません.そこで次の記事ではAndroid MVP入門からステップアップへのシステムフレームワーク統合(完結)についてまとめます
この文章はオリジナルブログです.転載は出典を明記してください.