MVP框架

理解: 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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值