首先创建ui包 在里面创建base包,创建基类BaseContract和BasePresenter、BaseActivity、BaseFragment
BaseContract
package com.example.a1512qmvp.ui.base; /** * 所有Presenter的积累,实现了BaseContract.BasePresenter接口 * * @param <T> */ public class BasePresenter<T extends BaseContract.BaseView> implements BaseContract.BasePresenter<T> { protected T mView; @Override public void attchView(T view) { this.mView = view; } @Override public void detachView() { if (mView != null) { mView = null; } } }BasePresenter
public interface BaseContract { //抽取所有Presenter共性,比如绑定,解绑 interface BasePresenter<T extends BaseView> { void attchView(T view); void detachView(); } //抽取所有View的共性,比如显示进度条和关闭进度 interface BaseView { void showLoading(); void dismissLoading(); } }
BaseActivity
import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Toast; import org.greenrobot.eventbus.EventBus; import javax.inject.Inject; import demo.bwie.com.xm_lianxi.inter.IBase; import demo.bwie.com.xm_lianxi.utile.SharedPreferencesUtils; public abstract class BaseActivity<T extends BaseContract.BasePresenter> extends AppCompatActivity implements IBase, BaseContract.BaseView { @Inject protected T mPresenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getContentLayout()); inject(); //绑定 if (mPresenter != null) { mPresenter.attchView(this); } } @Override public void initView(View view) { } @Override protected void onDestroy() { super.onDestroy(); //解绑 if (mPresenter != null) { mPresenter.detachView(); } } @Override public void showLoading() { } @Override public void dismissLoading() { } protected String getUid() { return (String) SharedPreferencesUtils.getParam(this, "uid", ""); } protected String getToken() { return (String) SharedPreferencesUtils.getParam(this, "token", ""); } protected void toast(String str){ Toast.makeText(this,str,Toast.LENGTH_SHORT).show(); } }
BaseFragment
import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import javax.inject.Inject; import butterknife.ButterKnife; import butterknife.Unbinder; import demo.bwie.com.xm_lianxi.inter.IBase; public abstract class BaseFragment<T extends BaseContract.BasePresenter> extends Fragment implements IBase, BaseContract.BaseView { @Inject protected T mPresenter; private Unbinder bind; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); inject(); if (mPresenter != null) { mPresenter.attchView(this); } } @Override public void onDestroy() { super.onDestroy(); if (mPresenter != null) { mPresenter.detachView(); } if (bind != null) { bind.unbind(); } } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(getContentLayout(), null); bind = ButterKnife.bind(getActivity(), view); initView(view); return view; } @Override public void showLoading() { } @Override public void dismissLoading() { } }
创建inter包 创建IBase基类接口和抽取条目点击监听的接口
import android.view.View; public interface IBase { int getContentLayout(); void inject(); void initView(View view); }
public interface OnItemClickListener { void onItemClick(int position); void onLongItemClick(int position); }
创建bean包 根据需求获取解析各模块bean类
创建net包,创建各模块接口和接口的实现类
创建module包,创建HttpMoudle类,进行网络请求,使用Retrofit+RxJava+OkHttp实现网络加载
import java.util.concurrent.TimeUnit; import dagger.Module; import dagger.Provides; import demo.bwie.com.xm_lianxi.net.AdApi; import demo.bwie.com.xm_lianxi.net.AdApiService; import demo.bwie.com.xm_lianxi.net.Api; import demo.bwie.com.xm_lianxi.net.CatagoryApi; import demo.bwie.com.xm_lianxi.net.CatagoryApiService; import demo.bwie.com.xm_lianxi.net.ListApi; import demo.bwie.com.xm_lianxi.net.ListApiService; import demo.bwie.com.xm_lianxi.net.LoginApi; import demo.bwie.com.xm_lianxi.net.LoginApiService; import demo.bwie.com.xm_lianxi.net.ProductCatagoryApi; import demo.bwie.com.xm_lianxi.net.ProductCatagoryApiService; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; @Module public class HttpModule { @Provides OkHttpClient.Builder provideOkHttpClientBuilder(){ return new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .writeTimeout(20,TimeUnit.SECONDS) .readTimeout(20,TimeUnit.SECONDS); } //登录模块的访问数据 @Provides LoginApi provideLoginApi(OkHttpClient.Builder builder){ Retrofit retrofit=new Retrofit.Builder() .baseUrl(Api.BASEURL) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .client(builder.build()) .build(); LoginApiService loginApiService=retrofit.create(LoginApiService.class); return LoginApi.getLoginApi(loginApiService); } }
连接需要一个桥梁写一个文件夹Component定义一个类HttpComponent,将所需要的页面定义在里面
import dagger.Component; import demo.bwie.com.shopcrat.MainActivity; import demo.bwie.com.shopcrat.module.HttpModule; @Component(modules = HttpModule.class) public interface HttpComPonent { void inject(MainActivity mainActivity); }