RecycleVIew点击监听

适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private Context context;
    private JSONArray data;

    public MyAdapter(Context context, JSONArray data) {
        this.context = context;
        this.data = data;
    }

    //创建view设置给ViewHolder
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //第一种方式 自适应不能填充父窗体 从新设置宽度
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, null);
        //得到WindowManager
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        //得到屏幕的宽
        int width = wm.getDefaultDisplay().getWidth();
        //获取LayoutParams
        RecyclerView.LayoutParams params = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        //把屏幕的宽给view
        params.width = width;
        view.setLayoutParams(params);


        //第二种方式
        //    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent,false);


        final MyViewHolder holder = new MyViewHolder(view);
        //使用view的条目点击事件
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //自己获取position
                int position = holder.getLayoutPosition();
                //设置监听
                if (listener != null) {
                    listener.onRecyclerViewItemClick(position);
                }
            }
        });
        //使用view的长按事件
        view.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                //自己获取position
                int position = holder.getLayoutPosition();
                //设置监听
                if (listener != null) {
                    longListener.onRecyclerViewLongItemClick(position);
                }
                //true代表消费事件 不继续传递
                return true;
            }
        });
        return holder;
    }

    //绑定数据
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        try {
            /* ViewGroup.LayoutParams layoutParams = holder.iv.getLayoutParams();
            position = position % 2;
            Log.i("sss", position + "");
            if (position == 0) {
                layoutParams.height = 200;

            } else {
                layoutParams.height = 300;
            }
            holder.iv.setLayoutParams(layoutParams);*/
            JSONObject jsonObject = data.getJSONObject(position);
            String image_url = jsonObject.optString("image_url");
            String title = jsonObject.getString("title");
            holder.tv_title.setText(title);

            Picasso.with(context).load(image_url).placeholder(R.mipmap.ic_launcher).into(holder.iv);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    //数据长度
    @Override
    public int getItemCount() {
        return data.length();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {

        private ImageView iv;
        private TextView tv_title;


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

            iv = (ImageView) itemView.findViewById(R.id.iv);
            tv_title = (TextView) itemView.findViewById(R.id.tv_title);

        }
    }

    /**
     * 条目点击
     */
    //声明接口
    private OnRrecyclerViewItemClickListener listener;

    //定义接口 和抽象方法
    public interface OnRrecyclerViewItemClickListener {
        void onRecyclerViewItemClick(int position);
    }

    //提供设置监听的方法
    public void setOnRrecyclerViewItemClickListener(OnRrecyclerViewItemClickListener listener) {
        this.listener = listener;
    }

    /**
     * 条目长按
     */
    //声明接口
    private OnRecyclerViewLongItemClickListener longListener;

    //定义接口 和抽象方法
    public interface OnRecyclerViewLongItemClickListener {
        void onRecyclerViewLongItemClick(int position);
    }

    //提供设置监听的方法
    public void setOnRecyclerViewLongItemClickListener(OnRecyclerViewLongItemClickListener longListener) {
        this.longListener = longListener;
    }

    //添加数据
    public void addData(int position, JSONObject jsonObject) {
        try {
            data.put(position, jsonObject);
            notifyItemInserted(position);
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

    //删除数据
    @TargetApi(Build.VERSION_CODES.KITKAT)
    public void removeData(int position) {
        data.remove(position);
        notifyItemRemoved(position);
    }

    //改变数据
    @TargetApi(Build.VERSION_CODES.KITKAT)
    public void changeData(int position, JSONObject jsonObject) {

        try {
            data.remove(position);
            data.put(position, jsonObject);
            notifyItemChanged(position);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
MainActivity

private RecyclerView rv;
    private String url = "http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=one";
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 0:
                    String json = (String) msg.obj;
                    try {
                        final JSONObject jsonObject = new JSONObject(json);
                        final JSONArray data = jsonObject.getJSONArray("data");
                        //设置适配器
                        adapter = new MyAdapter(MainActivity.this, data);
                        rv.setAdapter(adapter);

                        //通过适配器回调监听
                        adapter.setOnRrecyclerViewItemClickListener(new MyAdapter.OnRrecyclerViewItemClickListener() {
                            @Override
                            public void onRecyclerViewItemClick(int position) {
                                Toast.makeText(MainActivity.this, "点击条目:" + position, Toast.LENGTH_SHORT).show();
                                //创建动画
                                final MyItemAnimator animator = new MyItemAnimator();
                                animator.setAddDuration(2000);
                               /* try {
                                    JSONObject jo = data.getJSONObject(position);
                                    adapter.addData(position, jo);

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }*/
                                //animator.setRemoveDuration(1000);
                                //添加动画
                                rv.setItemAnimator(animator);
                            }
                        });
                        adapter.setOnRecyclerViewLongItemClickListener(new MyAdapter.OnRecyclerViewLongItemClickListener() {
                            @Override
                            public void onRecyclerViewLongItemClick(int position) {
                                Toast.makeText(MainActivity.this, "长按条目:" + position, Toast.LENGTH_SHORT).show();

                            }
                        });
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    break;
            }
        }
    };
    private MyAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        rv = (RecyclerView) findViewById(R.id.rv);
        //获取数据
        getData();


        //设置LinearLayoutManager布局管理器
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        //设置GridLayoutManager布局管理器
        GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);

        //设置StaggeredGridLayoutManager布局管理器
        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);

        //把布局管理器给RecyclerView
        rv.setLayoutManager(linearLayoutManager);
        //添加华丽分割线
        MyDecoration decoration = new MyDecoration(this, LinearLayoutManager.VERTICAL);
        rv.addItemDecoration(decoration);
        //给表格添加华丽的分割线
       /* GridDivider gridDivider = new GridDivider(this, 2, Color.BLUE);
        rv.setLayoutManager(gridLayoutManager);
        rv.addItemDecoration(gridDivider);*/


    }

    private void getData() {
        OkHttp3Utils.doGet(url, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String json = response.body().string();
                Message message = handler.obtainMessage(0, json);
                message.sendToTarget();
            }
        });

    }
}


猜你喜欢

转载自blog.csdn.net/qq_39700454/article/details/78243782
今日推荐