1. 程式人生 > >實現RecyclerView點選事件的探索-----微風android新手-------

實現RecyclerView點選事件的探索-----微風android新手-------

RecyclerView是一個官方介紹RecyclerView為在有限的視窗展現大量資料的控制元件。擁有類似功能的控制元件有ListView、GridView的控制元件,是support:recyclerview-v7中提供的控制元件。

RecyclerView的使用就不說了,說說RecyclerView中的item的點選事件怎麼搞?

做法是在介面卡中實現,並封裝方法暴露給外部呼叫

1.新建一個介面,用介面回撥的方法實現item的點選事件處理

public interface OnItemClickListener {
    public void onItemClick(View view, int postion);
}

2.外部宣告我們的定義的介面 

private OnItemClickListener mClickListener;//自定義的介面

3.在Adapter中的onCreateViewHolder()方法中返回ViewHolder的同時,返回一個OnItemClickListener

    /*在這裡對item進行繫結,並用View物件去接收它並作為返回*/
    @Override
    public CityAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.location_city_option_item, parent, false);
        return new ViewHolder(view, mClickListener);
    }

4.在標準化的ViewHolder內部類中做自定義介面的宣告,對item設定監聽事件

    /*在ViewHolder中定義物件並通過findviewbyid()例項化繫結控制元件*/
    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        TextView cityName;
        private OnItemClickListener mListener;// 宣告自定義監聽介面

        /*建構函式中新增自定義的介面的引數*/
        public ViewHolder(View itemView, OnItemClickListener listener) {
            super(itemView);
            mListener = listener;
            itemView.setOnClickListener(this); // 為ItemView新增點選事件
            cityName = itemView.findViewById(R.id.city_option_tv);
        }

        @Override
        public void onClick(View v) {

            mListener.onItemClick(v, getLayoutPosition());
        }
    }

值得注意的是getPosition()被廢棄後,官方提供了兩個新的方法

// getpostion(已經廢棄)為Viewholder自帶的一個方法,用來獲取RecyclerView當前的位置,將此作為引數,傳出去
//getAdapterPosition 返回資料在Adapter中的位置(也許位置的變化還未來得及重新整理到佈局中),當使用Adapter的時候考慮使用
//getLayoutPosition 返回佈局中最新的計算位置,和使用者所見到的位置一致,當做使用者輸入(例如點選事件)的時候考慮使用

5.定義方法,給外部呼叫

    /*item的點選事件處理,這裡採用了介面回撥的方法實現*/
    /*將該方法暴露給外部,便於外部呼叫*/
    public void setOnItemClickListener(OnItemClickListener listener) {
        this.mClickListener = listener;
    }

6.外部如何呼叫

 /*RecyclerView的相關配置*/
        RecyclerView recyclerView = view.findViewById(R.id.recyler_view_garage);
        layoutManager = new LinearLayoutManager(getContext());
        recyclerView.setLayoutManager(layoutManager);
        GarageAdapter adapter = new GarageAdapter(getContext(),garageList);
        recyclerView.setAdapter(adapter);
        //這裡是item的點選事件
        adapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(View view, int postion) {
                ToastUtil.showMessage(getContext(),"你點選了"+postion);
            }
        });

以上就是實現點選事件的方法,這是我的新手學習記錄,希望多多指教