dagger2+butterknife+xutils搭建MVP模型

        相比上一篇博客所写的一个最基本MVP模型,这篇博客则加入依赖注入,使MVP模型结构更清晰,解耦效果更好。直接用代码说话吧!

        需要添加的jar包:build.gradle

apply plugin: 'com.android.application'
apply plugin: 'android-apt'
apply plugin: 'com.neenbedankt.android-apt'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.androidxx.yangjw.day37_dagger2_butterknife_mvp_xutils_demo"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.jakewharton:butterknife:8.4.0'
    apt 'com.jakewharton:butterknife-compiler:8.4.0'
    compile 'com.google.dagger:dagger:2.7'
    apt 'com.google.dagger:dagger-compiler:2.7'
    compile 'org.xutils:xutils:3.3.36'
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
}
MyApplication:

import android.app.Application;

import org.xutils.x;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //完成Xtuils的初始化
        x.Ext.init(this);
    }
}
View层:

ISelectedView:

public interface ISelectedView {

    /**
     * 接收Presenter层返回的结果
     * @param selectedBean
     */
    void setListDatas(SelectedBean selectedBean);
}
MainActivity:

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity implements ISelectedView{

    @BindView(R.id.guide_selected_list_lv)
    ListView mListView;
    @Inject
    IGuidePresenter mGuidePresenter;

    private List<SelectedBean.DataBean.ItemsBean> itemsBeanList = new ArrayList<>();
    private SelectedAdapter selectedAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        DaggerAppComponent.create().inject(this);
        mGuidePresenter.setSelectedView(this);
        mGuidePresenter.querySelectedList(1);
        selectedAdapter = new SelectedAdapter(itemsBeanList,this);
        mListView.setAdapter(selectedAdapter);
    }

    @Override
    public void setListDatas(SelectedBean selectedBean) {
        //接收Presenter返回的数据
        if (selectedBean != null) {
            LogUtils.log(MainActivity.class,""+selectedBean.getCode());
            if (selectedBean.getData() != null) {
                itemsBeanList.addAll(selectedBean.getData().getItems());
                selectedAdapter.notifyDataSetChanged();
            }
        }
    }
}
SelectedAdapter:

public class SelectedAdapter extends BaseAdapter {
    private List<SelectedBean.DataBean.ItemsBean> beanList ;
    private Context mContext;
    private LayoutInflater mLayoutInfalter;

    public SelectedAdapter(List<SelectedBean.DataBean.ItemsBean> beanList, Context mContext) {
        this.beanList = beanList;
        this.mContext = mContext;
        mLayoutInfalter = LayoutInflater.from(mContext);
    }

    @Override
    public int getCount() {
        return beanList == null ? 0 : beanList.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        ViewHolder viewHolder = null;
        if (view == null) {
            view = mLayoutInfalter.inflate(R.layout.guide_selected_item_view,parent,false);
            viewHolder = new ViewHolder(view);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }
        SelectedBean.DataBean.ItemsBean itemsBean = beanList.get(position);
        if (itemsBean != null) {
            String title = itemsBean.getTitle();
            viewHolder.mTitleTxt.setText(title);
            Picasso.with(mContext).load(itemsBean.getCover_image_url()).into(viewHolder.mImageView);
        }

        return view;
    }

    class ViewHolder {
        @BindView(R.id.guide_selected_item_iv)
        ImageView mImageView;
        @BindView(R.id.guide_selected_item_title_txt)
        TextView mTitleTxt;
        public ViewHolder(View view) {
            view.setTag(this);
            ButterKnife.bind(this,view);
        }
    }
}

Presenter层:

IGuidePresenter

public interface IGuidePresenter {

    void setSelectedView(ISelectedView selectedView);
    /**
     * 加载指南精选列表数据
     * @param pageno
     */
    void querySelectedList(int pageno);

    interface Callback {
        void success(int responseCode, SelectedBean selectedBean);
    }
}
GuidePresenter:

public class GuidePresenter implements IGuidePresenter,IGuidePresenter.Callback{

    private IGuideModel mGuideModel;
    private ISelectedView selectedView;

    public GuidePresenter(IGuideModel guideModel) {
        this.mGuideModel = guideModel;
    }

    @Override
    public void setSelectedView(ISelectedView selectedView) {
        this.selectedView = selectedView;
    }

    @Override
    public void querySelectedList(int pageno) {
        this.mGuideModel.querySelectedList(pageno,this);
    }

    @Override
    public void success(int responseCode, SelectedBean selectedBean) {
        //获取Model的结果
        this.selectedView.setListDatas(selectedBean);
    }
}
model层:

public interface IGuideModel {

    void querySelectedList(int pageno,IGuidePresenter.Callback callback);

}
GuideModel:

public class GuideModel implements IGuideModel{

    private Gson gson;

    public GuideModel(Gson gson) {
        this.gson = gson;
    }

    @Override
    public void querySelectedList(int pageno,final IGuidePresenter.Callback callback) {
        RequestParams requestParams = new RequestParams(URLConstant.GUIDE_SELECTED_URL);
        x.http().get(requestParams, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                LogUtils.log(GuideModel.class,result);
                SelectedBean selectedBean = gson.fromJson(result, SelectedBean.class);
                callback.success(1,selectedBean);
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {

            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }
        });
    }
}
dagger:

AppComponent:

@Component(modules = {AppModule.class})
public interface AppComponent {

    void inject(MainActivity activity);
}
AppModule:

@Module
public class AppModule {

    @Provides
    public Gson provideGson() {
        return new Gson();
    }
    @Provides
    public IGuideModel provideGuideModule(Gson gson) {
        return new GuideModel(gson);
    }
    @Provides
    public IGuidePresenter provideGuidePresenter(IGuideModel guideModel) {
        return new GuidePresenter(guideModel);
    }
}
URLConstant:

public class URLConstant {

    /**
     * 指南--精选--列表
     */
    public static final String GUIDE_SELECTED_URL = "http://";
}
由于布局文件相对简单,我就不附代码了!








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值