首先创建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);
}