RecyclerView的item的點擊事件

第九天·RecyclerView的點擊事件

   在上節筆記中我們寫到了recyclerView的使用方法,這節我們說recyclerView的點擊事件,我們在此基礎上進行擴展。

首先,先聲明一個接口,定義其相應時間的方法,在recyclerView的adapter內來聲明一個接口對象

這裏寫圖片描述

2、在onBindViewHolder的方法中添加響應事件

在這裏給Item添加響應事件

3、在MainActivity中實現接口,並重寫方法,實現內容
在main裏的方法中給adapter添加監聽器

adapter.setOnRVItemClickListener(this);

然後是創建響應事件

public void onItemClick(int pos){
Log.i("位置信息",pos+"");
}

源碼在此:

package com.xiaogao.user.android2lesson_08_recyclerviewlist;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity implements OnRVItemClickListener {

    /*
    recyclerView使用步驟
    1、添加依賴在APP-->depend裏添加
    2、在佈局文件中添加一個recyclerView
    3、創建一個佈局文件,用於給每一個Item佈局
    4、聲明屬性並與佈局文件中的控件進行綁定
     */

    //聲明recyclerView對象
    private RecyclerView recyclerView;
    //聲明一個數據集合
    private List<Map<String, Object>> mList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        //5、設置佈局管理器格式
        //***使用線性佈局管理器
//        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        //***使用表格佈局管理器
//        recyclerView.setLayoutManager(new GridLayoutManager(this,3));
        //***使用瀑布流佈局管理器
        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
        //8.產生數據
        createData();
        //6、創建適配器
        MyAdapter adapter=new MyAdapter();
        //7、綁定適配器
        recyclerView.setAdapter(adapter);

        //給adapter添加監聽器
        adapter.setOnRVItemClickListener(this);
    }

    private void createData() {
        mList=new ArrayList<>();
        for(int i=0;i<20;i++){
            Map map=new HashMap();
//            map.put("text","南海是中國的"+i);
            map.put("image",R.drawable.d1+i);
            mList.add(map);
        }
    }

    /**
     * 響應事件
     * @param pos
     */
    @Override
    public void onItemClick(int pos) {
        Log.i("位置信息",pos+"");
    }

    //6.創建適配器
    class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
        //聲明一個監聽器對象
        private OnRVItemClickListener onRVItemClickListener;
        //提供一個方法設置監聽器
        public void setOnRVItemClickListener(OnRVItemClickListener onRVItemClickListener){
            this.onRVItemClickListener=onRVItemClickListener;
        }



        //當需要拿到viewholder的時候就會調用,返回值與之前給的泛型相同,
        // 在加載不同類型的佈局的時候,可以根據viewType來創建不同的viewHolder
        //viewType是Item的視圖類型
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            //這裏是拿到佈局文件
//            View view= LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item,null);
            View view= LayoutInflater.from(MainActivity.this).inflate(R.layout.simple_layout,null);
            //根據佈局文件創建一個ViewHolder
            MyViewHolder viewHolder=new MyViewHolder(view);
            return viewHolder;
        }

        //當內容和佈局進行綁定的時候回調這個方法,每當有新數據進行屏幕的時候,也會回調這個方法
        //參數holder和ViewHolder類型與泛型所規定的類型相同,參數position代表的是該item的位置
        //可以通過position來獲取對應的數據
        @Override
        public void onBindViewHolder(final MyViewHolder holder, int position) {
            //從數據列表中獲取到數據
//            String text=mList.get(position).get("text").toString();
            //將數據設置到界面上
//            holder.textView.setText(text);
//            holder.textView.setTextColor(Color.BLUE);

            Integer image= (Integer) mList.get(position).get("image");
            holder.image.setImageResource(image);

            //在這裏給Item添加響應事件
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //獲取點擊的位置
                    int pos=holder.getLayoutPosition();
                    //傳遞點擊位置
                    onRVItemClickListener.onItemClick(pos);


                }
            });

        }

        /**
         * 返回數據的個數
         * @return
         */
        @Override
        public int getItemCount() {
            return mList.size();
        }


        //7、創建viewHolder
        class MyViewHolder extends RecyclerView.ViewHolder {
//            TextView textView;
            ImageView image;
            public MyViewHolder(View itemView) {
                super(itemView);
                //進行控件關聯
//                textView = (TextView) itemView.findViewById(R.id.simple_tv);
                image= (ImageView)itemView.findViewById(R.id.simple_image);
            }
        }
    }
}
發佈了31 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章