public interface BasePresenter { //订阅 void subscribe(); //解订 void unsubscribe(); } public interface BaseView<T> { void setPresenter(T presenter);//view中设置处理器 }
1.新建MineContract,view与presenter的抽象接口集合,相当于讲下要去做那些事情
public interface MineContract { interface View extends BaseView<Presenter>{ void login_success(String response); void login_failure(String msg); void network_exception(int errcode); void network_normal(); } interface Presenter extends BasePresenter{ void login(User user); }
2.新建MinePresenter,实现MineContract.Presenter接口方法,相当于事情具体怎么去做
public class MinePresenter implements MineContract.Presenter { private final static String TAG="MinePresenter"; private MineContract.View mView; public MinePresenter(MineContract.View view) { this.mView = view; this.mView.setPresenter(this); } @Override public void subscribe() { } @Override public void unsubscribe() { } @Override public void login(User user) { new Handler().postDelayed(new Runnable() { @Override public void run() { mView.login_success("success"); Log.d(TAG,"logined"); } },500); } }
创建User类,作为登录测试
public class User { private String uId; private String uName; private String uPwd; private String uType; private String uLevel; //省略set与get方法 }
FragmentActivity
public class MainActivity extends FragmentActivity { private FragmentManager mFragMgr; @Inject MinePresenter presenter; private MineFragment mineFragment; private final String MINE = "Mine"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mFragMgr = getSupportFragmentManager(); initFragments(); showFragments(MINE,true); } private void initFragments() { mineFragment = new MineFragment(); } private void showFragments(String tag, boolean init) { FragmentTransaction trans = mFragMgr.beginTransaction(); if (init) { trans.add(R.id.main_content, getFragmentByTag(tag), tag); trans.addToBackStack(tag); } else { trans.replace(R.id.main_content, getFragmentByTag(tag), tag); } trans.commit(); } private Fragment getFragmentByTag(String tag) { if (MINE.equals(tag)) { return mineFragment; } return null; } }
implements MineContract.View
接口public class MineFragment extends Fragment implements MineContract.View { //省略部分代码 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); uName = (LikeEditText) view.findViewById(R.id.uName); uPwd = (LikeEditText) view.findViewById(R.id.uPwd); loginBtn = (Button) view.findViewById(R.id.login_btn); loginBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { User user=new User(); user.setuName(uName.getText().toString()); user.setuPwd(uPwd.getText().toString()); minePresenter.login(user); } }); }
前面讲的都是mvp架构基本搭建,下面是如何运用dagger2;
一个应用在创建时会产生唯一的Application对象,可以在应用的onCreate
函数创建,下面有几个步骤:
1.1创建提供应用对象的Module
@Module public class AppModule { private Context mContext; public AppModule(Context context){ this.mContext=context; } @Provides public Context provideContext(){ return this.mContext; } }
1.2创建AppComponent为其他Component提供依赖
@Component(modules = AppModule.class) public interface AppComponent { Context getContext(); }
public class SampleApplication extends Application { private AppComponent appComponent; private static SampleApplication mInstance; @Override public void onCreate() { super.onCreate(); mInstance=this; appComponent=DaggerAppComponent.builder().appModule(new AppModule(this)).build(); } public static SampleApplication getInstance(){ return mInstance; } public AppComponent getAppComponent(){ return appComponent; } }
@Inject public MinePresenter(MineContract.View view) { this.mView = view; this.mView.setPresenter(this); }
@Module public class MinePresenterModule { private final MineContract.View mView; public MinePresenterModule(MineContract.View view) { mView = view; } @Provides MineContract.View provideStatisticsContractView() { return mView; } }
@Component(dependencies = AppComponent.class,modules = MinePresenterModule.class) public interface MainComponent { MineFragment inject(MineFragment mineFragment); MainActivity inject(MainActivity mainActivity); }
@Inject MinePresenter presenter; private void initFragments() { mineFragment = new MineFragment(); DaggerMainComponent.builder().minePresenterModule(new MinePresenterModule(mineFragment)).appComponent(SampleApplication.getInstance().getAppComponent()).build().inject(this); }
以上所有的步骤已完成,编译项目,dagger2自动生成相关类,并完成注入。
Inject
方法本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句