理解: MVP框架中的M是Model模型层、V是View视图层、P是Presenter实现复杂逻辑层;主要是M层和P层实现复杂的逻辑思维,然而V层只是去调用,不需要实现任何逻辑,最终是M层和P层保持连接,P层和V层保持连接,M层和V层没有联系。
第一个类实现xutils,需要导入XUtils的第三方框架
public class HomeAppliction extends Application {
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);
x.Ext.setDebug(BuildConfig.DEBUG);
}
}
一、Model 模型层
//实现网络请求的一个类
public class HttpUtils {
/* public static void getDataUtils(RequestParams requestParams, Callback.CommonCallback<String> commonCallback){
x.http().get(requestParams,commonCallback);
}*/
public static <T> void getDataUtils(String url, HashMap<String, String> hashMap,final OnCallBack oncallback,final Class<T> tClass){
RequestParams params = new RequestParams(url);
//hashMap给一个判定
if (hashMap != null){
Iterator<String> iterator = hashMap.keySet().iterator();
while (iterator.hasNext()){
String key = iterator.next();
String value = hashMap.get(key);
params.addQueryStringParameter(key,value);
}
}
//get方式网络请求数据
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
Gson gson = new Gson();
T t = gson.fromJson(result, tClass);
oncallback.onCall(t);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
public interface OnCallBack<T>{
void onCall(T t);
}
}
//是一个Bean类,具体内容就不在这里实现了
public class HomeBean {
}
二、Presenter逻辑思维层
//Presenter的一个帮助类,是通过泛型来实现,用处是可以减少代码量,增强复用性
public class BasePresenter<T extends IMVPInterface> {
private T t;
public void attachView(T t){
this.t = t;
};
public T getMvpView(){
return t;
}
}
//presenter内容的实现
public class HomePersonter extends BasePresenter<IHomeInterface>{
private String url = "http://v.juhe.cn/toutiao/index?key=aa8e1225f554f4bd8e06938f12052c3c";
private HashMap<String,String> hashMap = new HashMap<>();
public <T> void getHomeData(Class<T> t){
//直接调用公共的方法
HttpUtils.getDataUtils(url, hashMap, new HttpUtils.OnCallBack<T>() {
@Override
public void onCall(T t) {
if (getMvpView() != null){
getMvpView().callBacks(t);
}else {
Log.e("HomePresenter","请调用 attachView ");
}
}
}, t);
}
//加载图片
public void getImage(ImageView image,String url){
x.image().bind(image,url);
}
}
三、View视图层
- 1.1主方法
//MainActivity的主方法
public class MainActivity extends AppCompatActivity implements IHomeInterface<HomeBean> {
private HomeAdapter adapter;
private HomePersonter homePersonter;
private HomeAdapter homeAdapter;
private HomeBean homeBea;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//条目显示控件的ID
onLv = (ListView) findViewById(R.id.onLv2);
initDate();
}
private void initDate() {
homePersonter = new HomePersonter();
homePersonter.attachView(this);
homePersonter.getHomeData(HomeBean.class);
//添加适配器
homeAdapter = new HomeAdapter(this);
homeAdapter.getPersent(homePersonter);
onLv.setAdapter(homeAdapter);
}
//重写接口中的方法
@Override
public void callBacks(HomeBean homeBean) {
homeAdapter.getDate(homeBean.getResult().getData());
homeAdapter.notifyDataSetChanged();
}
}
- 1.2Adapter的实现
public class HomeAdapter extends BaseAdapter {
private Context context;
private viewHolder holder;
private ImageView onimg;
private TextView ontv;
private HomePersonter homePersonter;
private List<HomeBean.ResultBean.DataBean> list = new ArrayList<>();
public HomeAdapter(Context context){
this.context = context;
}
public void getPersent(HomePersonter homePersonter){
this.homePersonter = homePersonter;
}
@Override
public int getCount() {
return list.size();
}
@Override
public HomeBean.ResultBean.DataBean getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null){
convertView = View.inflate(context, R.layout.image_main,null);
holder = new viewHolder();
holder.onimg = (ImageView) convertView.findViewById(R.id.onimg);
holder.ontv = (TextView) convertView.findViewById(R.id.ontv);
convertView.setTag(holder);
}else{
holder = (viewHolder) convertView.getTag();
}
holder.ontv.setText(getItem(position).getTitle());
homePersonter.getImage(holder.onimg,getItem(position).getThumbnail_pic_s());
return convertView;
}
static class viewHolder{
private ImageView onimg;
private TextView ontv;
}
public void getDate(List<HomeBean.ResultBean.DataBean> list){
if (list != null){
this.list.addAll(list);
}
}
}
- 1.3接口的类
//父类接口
public interface IMVPInterface {
}
//子类接口
public interface IHomeInterface<T> extends IMVPInterface{
void callBacks(T t);
}