MVP实现RecyclerView

来源:互联网 发布:sql语句编写 编辑:程序博客网 时间:2024/06/06 00:11
接口类
package com.bwie.month.contract;import com.bwie.month.model.RecyModel;public class RecyContract {    //View接口    public interface IRecyView {        public void setView(String s);    }    //Model接口    public interface IRecyModel {        public void getData(RecyModel.CCC ccc);    }    //PreSenter接口    public interface IRecyPresenter {        public void getData();    }}



Model
package com.bwie.month.model;import android.content.Context;import android.util.Log;import com.bwie.month.contract.RecyContract;import com.bwie.month.okhttputils.OkHttpUtils;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;public class RecyModel implements RecyContract.IRecyModel {    Context context;    public RecyModel(Context context) {        this.context = context;    }    private String s;    @Override    public void getData(final CCC ccc) {        OkHttpUtils.getInstance().doGet("http://news-at.zhihu.com/api/4/themes", new Callback() {            @Override            public void onFailure(Call call, IOException e) {                Log.e("Tag", "出错啦");            }            @Override            public void onResponse(Call call, Response response) throws IOException {                ccc.getDataS(response.body().string());            }        });    }    public interface CCC{        void getDataS(String s);    }}


PreSenter
import android.content.Context;import com.bwie.month.contract.RecyContract;import com.bwie.month.model.RecyModel;public class RecyPresenter implements RecyContract.IRecyPresenter {    Context context;    RecyModel model;    RecyContract.IRecyView view;    private String s;    public RecyPresenter(Context context, RecyContract.IRecyView view) {        this.context = context;        this.view = view;        model = new RecyModel(context);    }    @Override    public void getData() {        model.getData(new RecyModel.CCC() {            @Override            public void getDataS(String s) {                view.setView(s);            }        });    }}


主代码
package com.bwie.month.fragment;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.RecyclerView;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.bwie.month.R;import com.bwie.month.adapter.MyRecyclerViewTwoAdapter;import com.bwie.month.bean.ThemeBean;import com.bwie.month.contract.RecyContract;import com.bwie.month.presenter.RecyPresenter;import java.util.List;public class Fragment_theme extends Fragment implements RecyContract.IRecyView {    private RecyclerView rv;    private List list;    private MyRecyclerViewTwoAdapter adapter;    private RecyPresenter presenter;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = View.inflate(getActivity(), R.layout.frag_theme, null);        initView(view);        return view;    }    private void initView(View view) {        rv = (RecyclerView) view.findViewById(R.id.fg_theme_rv);        presenter = new RecyPresenter(getActivity(), this);        presenter.getData();//        new Thread() {//            @Override//            public void run() {//                super.run();//////            }//        }.start();    }    @Override    public void setView(String s) {        System.out.println("=======>"+s);        final ThemeBean bean = ThemeBean.objectFromData(s);        if (bean != null) {            Log.e("TAG","Bean不为空");            getActivity().runOnUiThread(new Runnable() {                @Override                public void run() {                    list = bean.getOthers();                    rv.setLayoutManager(new GridLayoutManager(getActivity(), 2));                    adapter = new MyRecyclerViewTwoAdapter(getActivity(), list);                    rv.setAdapter(adapter);                }            });        }else{            Log.e("TAG","Bean为空");        }    }}


适配器
import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;import com.bwie.month.R;import com.bwie.month.bean.ThemeBean;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import java.util.ArrayList;import java.util.List;public class MyRecyclerViewTwoAdapter extends RecyclerView.Adapter {    int TYPT_ONE = 1;    int TYPT_TWO = 2;    Context context;    List list = new ArrayList<>();    private final ImageLoader loader;    public MyRecyclerViewTwoAdapter(Context context, List list) {        this.context = context;        this.list = list;        ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(context);        loader = ImageLoader.getInstance();        loader.init(configuration);    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        if(viewType==TYPT_ONE){            View view = View.inflate(context, R.layout.rv_item_one, null);            ViewHolderOne holder = new ViewHolderOne(view);            return holder;        }else if(viewType==TYPT_TWO){            View view = View.inflate(context, R.layout.rv_item_two, null);            ViewHolderTwo holder = new ViewHolderTwo(view);            return holder;        }        return null;    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        if(holder instanceof ViewHolderOne){            ((ViewHolderOne) holder).tv.setText(list.get(position).getName());            loader.displayImage(list.get(position).getThumbnail(),((ViewHolderOne) holder).iv);        }else if(holder instanceof ViewHolderTwo){            ((ViewHolderTwo) holder).tv.setText(list.get(position).getName());            loader.displayImage(list.get(position).getThumbnail(),((ViewHolderTwo) holder).iv);        }    }    @Override    public int getItemCount() {        return list.size();    }    @Override    public int getItemViewType(int position) {        if (position % 2 == 0) {            return TYPT_ONE;        }        return TYPT_TWO;    }    class ViewHolderOne extends RecyclerView.ViewHolder{        View view;        RelativeLayout rl;        ImageView iv;        TextView tv;        public ViewHolderOne(View view) {            super(view);            this.view = view;            rl = view.findViewById(R.id.item_one);            iv = view.findViewById(R.id.item_one_iv);            tv = view.findViewById(R.id.item_one_tv);        }    }    class ViewHolderTwo extends RecyclerView.ViewHolder{        View view;        ImageView iv;        TextView tv;        LinearLayout ll;        public ViewHolderTwo(View view) {            super(view);            this.view = view;            ll = view.findViewById(R.id.item_two);            iv = view.findViewById(R.id.item_two_iv);            tv = view.findViewById(R.id.item_two_tv);        }    }}






原创粉丝点击