RecyclerView多条目加载(MVP)

搭建的框架

HttpUtils

public class HttpUtils implements Callback, okhttp3.Callback {

    private final OkHttpClient okHttpClient;
    private static HttpUtils INSTENCE;
    private HttpUtilsCallback httpUtilsCallback;

    public HttpUtils(){
        okHttpClient = new OkHttpClient.Builder().build();
    }

    public static HttpUtils getInstence(){
        synchronized (HttpUtils.class) {
            if (INSTENCE == null) {
                INSTENCE = new HttpUtils();
            }
        }
        return INSTENCE;
    }

    //get请求方法
    public void doGet(String path, HttpUtilsCallback httpUtilsCallback){
        this.httpUtilsCallback = httpUtilsCallback;

        Request request = new Request.Builder()
                .url(path)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(this);
    }

    //post请求方法
    public void doPost(String path, HttpUtilsCallback httpUtilsCallback){
        this.httpUtilsCallback = httpUtilsCallback;

        FormBody formBody = new FormBody.Builder().build();
        Request request = new Request.Builder()
                .url(path)
                .post(formBody)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(this);
    }

    @Override
    public void onFailure(Call call, IOException e) {

    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        String string = response.body().string();
        httpUtilsCallback.onSuccess(string);
    }
}
HttpUtilsCallback
public interface HttpUtilsCallback {
    void onSuccess(String str);
    void onFail(int errCode, String errMsg);
}
BasePresenter
public class BasePresenter<V extends IBaseView> {

    private V ibseview;

    public void attachView(V ibseview){
        this.ibseview = ibseview;
    }

    public V getView(){
        return ibseview;
    }

    public void detachView(){
        ibseview = null;
    }
}
MainPresenter
public class MainPresenter extends BasePresenter<IMainView> {

    private final HttpUtils httpUtils;

    public MainPresenter(){
        httpUtils = HttpUtils.getInstence();
    }

    public void getData(String path){

        httpUtils.doGet(path, new HttpUtilsCallback() {
            @Override
            public void onSuccess(String str) {
                getView().onSuccess(str);
            }

            @Override
            public void onFail(int errCode, String errMsg) {

            }
        });
    }
}

BaseActivity
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements IBaseView {

    public P presenter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(setLayout());
        initView();
        presenter = getPresenter();
        presenter.attachView(this);
        initData();
    }

    protected abstract int setLayout();
    protected abstract P getPresenter();
    protected abstract void initData();
    protected abstract void initView();


}
MainActivity
public class MainActivity extends BaseActivity<MainPresenter> implements IMainView {

    private RecyclerView recycler;
    private RecyclerAdapter recyclerAdapter;
    ArrayList<RecyclerBean.DataBean> list = new ArrayList<>();
    private HttpUtils httpUtils;
    int a;
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            if (msg.what==1){
                //拿到数据
                String json = (String) msg.obj;
                //解析数据
                Gson gson = new Gson();
                RecyclerBean recyclerBean = gson.fromJson(json, RecyclerBean.class);
                List<RecyclerBean.DataBean> data = recyclerBean.getData();
                list.addAll(data);
                recyclerAdapter.setData(list);
                recyclerAdapter.notifyDataSetChanged();

            }
            if (msg.what==2){
                recyclerAdapter.notifyDataSetChanged();
            }

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    protected int setLayout() {
        return R.layout.activity_main;
    }

    @Override
    protected MainPresenter getPresenter() {
        return new MainPresenter();
    }

    @Override
    protected void initView() {
        recycler = findViewById(R.id.recycler);
    }

    @Override
    protected void initData() {
        //设置布局管理器
        recycler.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
        //设置适配器
        recyclerAdapter = new RecyclerAdapter(this, list);
        recycler.setAdapter(recyclerAdapter);
        //加载数据
        String path = "http://api.expoon.com/AppNews/getNewsList/type/1/p/";
        presenter.getData(path);

        //调用自定义
        recyclerAdapter.setOnLongClickListener(new RecyclerAdapter.MyOnLongClickListener() {
            @Override
            public void OnItemLongClickListener(View view, int position) {
                a = position;
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("确定删除吗?");
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        list.remove(a);
                        handler.sendEmptyMessage(2);
                    }
                });
                builder.setNegativeButton("取消",null);
                builder.show();

            }
        });
    }


    @Override
    public void onSuccess(String str) {
        Message msg = Message.obtain();
        msg.what = 1;
        msg.obj = str;
        handler.sendMessage(msg);
    }

}
RecyclerAdapter
public class RecyclerAdapter extends RecyclerView.Adapter implements View.OnLongClickListener {

    private Context context;
    private ArrayList<RecyclerBean.DataBean> list;
    private MyOnLongClickListener myOnLongClickListener;

    public RecyclerAdapter(Context context, ArrayList<RecyclerBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //View view = null;
        RecyclerView.ViewHolder holder = null;
        switch (viewType){
            case 0:
                View inflate = View.inflate(context, R.layout.layout_item00, null);
                holder = new ViewHolderOne(inflate);
                inflate.setOnLongClickListener(this);
                break;
            case 1:
                View infla = View.inflate(context, R.layout.layout_item11, null);
                holder = new ViewHolderTwo(infla);
                infla.setOnLongClickListener(this);
                break;
        }

        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        switch (getItemViewType(position)){
            case 0:
                final ViewHolderOne holderOne = (ViewHolderOne) holder;
                holderOne.textview00_title.setText(list.get(position).getNews_title());
                holderOne.textview00_speak.setText(list.get(position).getNews_id());
                ImageLoader imageLoader = ImageLoader.getInstance();
                imageLoader.displayImage(list.get(position).getPic_url(),holderOne.imgview00);
                holderOne.imgview00.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        // 透明度变化从1—>0.1—>1—>0.5—>1,TextView对象经历4次透明度渐变
                        ObjectAnimator anim = ObjectAnimator.ofFloat(v, "alpha", 1f, 0.1f, 1f, 0.5f, 1f);
                        anim.setDuration(5000);// 动画持续时间
                        anim.start();
                    }
                });
                holderOne.itemView.setId(position);
                break;
            case 1:
                ViewHolderTwo holderTwo = (ViewHolderTwo) holder;
                holderTwo.textview11_title.setText(list.get(position).getNews_title());
                holderTwo.textview11_speak.setText(list.get(position).getNews_id());
                ImageLoader imageLoaderr = ImageLoader.getInstance();
                imageLoaderr.displayImage(list.get(position).getPic_url(),holderTwo.imgview110);
                imageLoaderr.displayImage(list.get(position).getPic_url(),holderTwo.imgview111);

                /*holderTwo.textview11_title.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        AlertDialog.Builder builder = new AlertDialog.Builder(context);
                        builder.setTitle("确定删除吗?");
                        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                list.remove(position);
                                notifyDataSetChanged();
                            }
                        });
                        builder.setNegativeButton("取消",null);
                        builder.show();
                        return false;
                    }
                });*/
                holderTwo.itemView.setId(position);
                break;
        }
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public void setData(List<RecyclerBean.DataBean> data) {
        list.addAll(data);
    }

    @Override
    public int getItemViewType(int position) {
        if (position%2 == 0){
            return 0;
        } else {
            return 1;
        }
    }

    private class ViewHolderOne extends RecyclerView.ViewHolder{

        private final TextView textview00_title;
        private final TextView textview00_speak;
        private final ImageView imgview00;

        public ViewHolderOne(View itemView) {
            super(itemView);

            textview00_title = itemView.findViewById(R.id.textview00_title);
            textview00_speak = itemView.findViewById(R.id.textview00_speak);
            imgview00 = itemView.findViewById(R.id.imgview00);
        }
    }

    private class ViewHolderTwo extends RecyclerView.ViewHolder{

        private final TextView textview11_title;
        private final TextView textview11_speak;
        private final ImageView imgview110;
        private final ImageView imgview111;

        public ViewHolderTwo(View itemView) {
            super(itemView);

            textview11_title = itemView.findViewById(R.id.textview11_title);
            textview11_speak = itemView.findViewById(R.id.textview11_speak);
            imgview110 = itemView.findViewById(R.id.imgview110);
            imgview111 = itemView.findViewById(R.id.imgview111);
        }
    }

    @Override
    public boolean onLongClick(View v) {
        if (myOnLongClickListener != null){
            myOnLongClickListener.OnItemLongClickListener(v,v.getId());
        }
        return true;
    }

    public void setOnLongClickListener(MyOnLongClickListener listener){
        this.myOnLongClickListener = listener;
    }

    public interface MyOnLongClickListener{
        void OnItemLongClickListener(View view, int position);
    }


}



猜你喜欢

转载自blog.csdn.net/ediao_nvhai/article/details/80113237
今日推荐