框架搭建思路

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

猜你喜欢

转载自blog.csdn.net/szj_0322/article/details/80345299
今日推荐