安卓開發:RecyclerView的使用(三)

其實我以前也有一個每天聊到深夜的人。  


查看文章:

  1. 安卓開發:RecyclerView的使用(一)
  2. 安卓開發:RecyclerView的使用(二)
  3. 安卓開發:RecyclerView的使用(三)

RecyclerView的點擊事件

我們來具體學習一下如何在 RecyclerView 中註冊點擊事件,修改 FruitAdapter 中的代 碼,如下所示:

public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
     private List<Fruit> mFruitList; 
     static class ViewHolder extends RecyclerView.ViewHolder {
         View fruitView;
         ImageView fruitImage;
         TextView fruitName;
         public ViewHolder(View view) {
             super(view);
             fruitView = view;
             fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
             fruitName = (TextView) view.findViewById(R.id.fruit_name);
         }
     }
     public FruitAdapter(List<Fruit> fruitList) {
         mFruitList = fruitList;
     }
     @Override
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.
             fruit_item, parent, false);
     final ViewHolder holder = new ViewHolder(view);
     holder.fruitView.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             int position = holder.getAdapterPosition();
             Fruit fruit = mFruitList.get(position);
             Toast.makeText(v.getContext(), "you clicked view " + fruit.getName(),
                 Toast.LENGTH_SHORT).show();
         }
     });
     holder.fruitImage.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             int position = holder.getAdapterPosition();
             Fruit fruit = mFruitList.get(position);
             Toast.makeText(v.getContext(), "you clicked image " + fruit.getName(),
                 Toast.LENGTH_SHORT).show();
         }
     });
     return holder;
    }
    ...
} 

我們先是修改了 ViewHolder,在 ViewHolder 中添加了 fruitView 變量來保存子項最外層 佈局的實例,然後在 onCreateViewHolder()方法中註冊點擊事件就可以了。這裏分別爲最外層 佈局和 ImageView 都註冊了點擊事件,RecyclerView 的強大之處也在這裏,它可以輕鬆實現子項 中任意控件或佈局的點擊事件。我們在兩個點擊事件中先獲取了用戶點擊的 position,然後通過 position 拿到相應的 Fruit 實例,再使用 Toast 分別彈出兩種不同的內容以示區別。

現在重新運行代碼,並點擊香蕉的圖片部分,效果如圖 3.37 所示。可以看到,這時觸發了 ImageView 的點擊事件。

然後再點擊菠蘿的文字部分,由於 TextView 並沒有註冊點擊事件,因此點擊文字這個事件 會被子項的最外層佈局捕獲到。

轉載聲明:此篇文章轉載自郭霖作者寫的《第一行代碼》書中的章節,因爲此章節對我幫助很大,並且寫的非常詳細,以便之後方便查閱。特在此做轉載聲明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章