相比上一篇博客所写的一个最基本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://"; }由于布局文件相对简单,我就不附代码了!
