1. 程式人生 > >10.RecyclerView中的item點選事件,如何實現

10.RecyclerView中的item點選事件,如何實現

recyclerview的使用方法和listview大同小異,但是使用的adapter確實非常不一樣:

1.需要在adapter宣告onclickListener()介面,

2.然後建立介面物件,

3.然後實現介面方法,

4.之後在adapte中的vieholder中繫結例項化的控制元件(這個一定要寫,因為你要點選那個控制元件,實現跳轉就需要設定這個控制元件的點選事件)

5.最後在建立receclorView和adapter物件的類中,實現自定義的onclickListener()方法,方法裡面就隨便寫了

程式碼:adapter

package zuo.com.ui.adapter;
import 
android.content.Context; import android.support.v7.widget.RecyclerView; 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 com.squareup.picasso.Picasso; import java.util.ArrayList;
import java.util.List; import zuo.com.ui.R; import zuo.com.ui.bean.HomeCagetoryBean; import zuo.com.ui.bean.RecyclorBean; import zuo.com.ui.bean.RecyclorItemBean; /** * Created by Administrator on 2016/10/8. */ public class HomeCategoryAdapter extends RecyclerView.Adapter<HomeCategoryAdapter.ViewHolder> { private static int
VIEW_TYPE_L=0; private static int VIEW_TYPE_R=1; private List<RecyclorBean> list; private LayoutInflater layoutInflater; public OnItemClickListener listener; //建立item監聽器物件 private View view; private Context mcontext; public void setOnItemClickListener(OnItemClickListener listener){ //建立建構函式 this.listener=listener; } public HomeCategoryAdapter(List<RecyclorBean> list,Context context){ this.list=list; this.mcontext=context; } //繫結item佈局檔案,然後在內部類ViewHolder中繫結item佈局檔案中的子控制元件 @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { layoutInflater=LayoutInflater.from(parent.getContext()); if(viewType==VIEW_TYPE_L) { view = layoutInflater.inflate(R.layout.template_home_cardview, parent, false); return new ViewHolder(view); }else{ view = layoutInflater.inflate(R.layout.template_home_cardview2, parent, false); return new ViewHolder(view); } } //繫結資料,即繫結子空間中的資料 @Override public void onBindViewHolder(ViewHolder holder, int position) { RecyclorBean recyclorBean=list.get(position); holder.textTitle.setText(recyclorBean.getTitle()); // holder.imageViewBig.setImageResource(homeCagetoryBean.getImgBig()); // holder.imageViewSmallTop.setImageResource(homeCagetoryBean.getImgSmallTop()); // holder.imageViewSmallBottom.setImageResource(homeCagetoryBean.getImgSmallButton()); Log.d("有問題",recyclorBean.getCpOne().getId()+""); //在adapter中運用快取機制,設定圖片 Picasso.with(mcontext).load(recyclorBean.getCpOne().getImgUrl().toString()).into(holder.imageViewBig); Picasso.with(mcontext).load(recyclorBean.getCpTwo().getImgUrl().toString()).into(holder.imageViewSmallTop); Picasso.with(mcontext).load(recyclorBean.getCpThree().getImgUrl().toString()).into(holder.imageViewSmallBottom); } //編寫方法針對cardview,偶數用cardview的佈局一,奇數用佈局二 @Override public int getItemViewType(int position) { if(position % 2==0){ return VIEW_TYPE_R; } else return VIEW_TYPE_L; } //返回資料的大小 @Override public int getItemCount() { return list.size(); } // 繫結item佈局檔案中的子控制元件 class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView textTitle; ImageView imageViewBig; ImageView imageViewSmallTop; ImageView imageViewSmallBottom; public ViewHolder(View itemView) { super(itemView); textTitle = (TextView) itemView.findViewById(R.id.text_title); imageViewBig = (ImageView) itemView.findViewById(R.id.imgview_big); imageViewSmallTop = (ImageView) itemView.findViewById(R.id.imgview_small_top); imageViewSmallBottom = (ImageView) itemView.findViewById(R.id.imgview_small_bottom); //在viewholder中繫結上面控制元件物件的點選事件,這裡的實現方法實際上就和button的點選事件一樣 imageViewBig.setOnClickListener(this); imageViewSmallTop.setOnClickListener(this); imageViewSmallBottom.setOnClickListener(this); } @Override public void onClick(View v) { RecyclorBean recyclorBean=list.get(getLayoutPosition()); //實現繫結控制元件的時候,獲取點選控制元件的物件,到底是什麼物件 if(listener!=null){ switch (v.getId()){ case R.id.imgview_big: //呼叫重寫的onclicklistener()實現繫結 listener.onClick(v,recyclorBean.getCpOne()); break; case R.id.imgview_small_top: listener.onClick(v,recyclorBean.getCpTwo()); break; case R.id.imgview_small_bottom: listener.onClick(v,recyclorBean.getCpThree()); break; default: break; } } } } //建立recyclorview的監聽事件 public interface OnItemClickListener{ void onClick(View v,RecyclorItemBean recyclorItemBean); } }
******************************************
******************************************
******************************************
這個地方就是zaiadapter中實現對控制元件的監聽事件的繫結(可以是recyclerview的item,或者adapter繫結的子佈局中的控制元件)
程式碼:

   public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        SimpleDraweeView draweeView;
TextView textTitle;
TextView textPrice;
Button button;
    public ViewHolder(View itemView) {
        super(itemView);
draweeView = (SimpleDraweeView) itemView.findViewById(R.id.drawee_view);
textTitle= (TextView) itemView.findViewById(R.id.text_title);
textPrice= (TextView) itemView.findViewById(R.id.text_price);
button= (Button) itemView.findViewById(R.id.hot_button);
//        draweeView.setOnClickListener(this);
itemView.setOnClickListener(this);
}

        @Override
public void onClick(View v) {
            listener.onClick(v,getAdapterPosition());
}
    }
    //建立recyclorview的監聽事件
public interface OnItemClickListener{
        void onClick(View v,int position);
}

}

Activity中的程式碼:
private void initRecyclerView(View view) {

    recyclerView= (RecyclerView) view.findViewById(R.id.recycler_view);
homeCategoryAdapter=new HomeCategoryAdapter(list,getContext());
//載入adapter
recyclerView.setAdapter(homeCategoryAdapter);
//必須寫才能出現recyclorView,也可以是GirdLayoutManager,只是顯示item的圖形不一樣
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
//設定分割線
recyclerView.addItemDecoration(new HomeItemDecoration());
//已經綁定了onclicklitener之後,只需要點選就能實現相應的效果
homeCategoryAdapter.setOnItemClickListener(new HomeCategoryAdapter.OnItemClickListener() {
       @Override
public void onClick(View v, RecyclorItemBean recyclorItemBean) {
           Toast.makeText(getContext(),recyclorItemBean.getTitle(),Toast.LENGTH_SHORT).show();
}
   });
}

相關推薦

RecyclerViewItem事件增加刪除Item瀑布流動畫效果長按拖動ItemRecyclerView複雜佈局、實現新聞頻道選擇器

RecyclerView的Item點選事件的實現,增加和刪除Item使用瀑布流動畫效果,長按拖動Item,RecyclerView複雜佈局的實現使用、RecyclerView去實現今日頭條新聞頻道選擇器。 使用ItemTouchHelper實現Item的拖動交換,由於Recy

關於ListViewItem事件動態改變Item控制元件屬性

ListView中的Item事件點選不了,怎麼辦? 由於要設定ListView的Item點選事件來改變控制元件屬性,設定的時候發現Item無法點選,原因之一是給Item中的控制元件添加了屬性android:clickable=”true”使Item不響應點選事

RecyclerViewitem事件

自從Google推出RecyclerView後,它就成為"寵兒",自定義外掛式的元件用起來很爽。但是很遺憾的是,Google並沒有給我們提供item的點選事件函式,但是我們可以類似ListView的item點選事件來構造出我們自己的RecyclerView item的點選事件

RecyclerView載入不同item實現item事件實現新增常用應用的功能

先上效果圖吧 點選加號 勾選需要的應用點選新增 這裡出現了三種item的樣式,一種是加號,一種是應用圖示加文字,最後一種是應用圖示加文字還有個checkBox 這裡RecyclerView是配合CardView使用的。 在AS中使用RecyclerView需要先在buil

10.RecyclerViewitem事件如何實現

recyclerview的使用方法和listview大同小異,但是使用的adapter確實非常不一樣: 1.需要在adapter宣告onclickListener()介面, 2.然後建立介面物件, 3.然後實現介面方法, 4.之後在adapte中的vieholder中繫結例

AndroidRecyclerview使用7----條目按鈕事件在activity呼叫(介面回撥)

0引入Recyclerview的支援庫    compile 'com.android.support:recyclerview-v7:23.4.0' 1效果圖: 2程式碼: 2.1MainActivity中: <span style="font-size:18p

詳解Android回撥機制與RecyclerViewItem事件實現

總是看書上寫著回調回調,以為就是函式呼叫換了個名字,尤其是看了Button的點選事件實現後,覺得不就是觸發機制。 A事件發生->後臺處理邏輯->告訴前臺怎麼做->結束。 Android常見button點選事件: loginB

RecyclerView條目item事件---放大

Adapter–建立介面 //建立介面 public interface RecyInterface{ void vh(Viewholder viewholder); } //宣告介面名 private RecyInterface mRec

關於jquery事件一次執行的效果就疊加一次click是新增事件的意思

我本人還是前端的菜鳥,所以一般在寫特效的時候,喜歡用jquery,但是在用jquery的點選事件中,點選後改變容器中的內容,但是發現每點一次就顯示一個內容,點幾次就有幾個。jquery中 的點選事件,每點一次執行的效果就疊加一次,click是新增點選事件的意思。那麼來解決這

RecyclerViewItem事件實現總結

自從開始使用RecyclerView代替ListView,會發現有很多地方需要學習。前一段時間的學習記錄有: 實現 RecyclerView的Item的點選事件有三種方式: 在建立 ItemView時新增點選監聽 當 ItemView attach Recycle

【菜鳥之路】RecyclerView新增Item事件

  今天下午繼續在專案中學著做RecyclerView,想給每個Item新增一個點選跳轉,翻了翻買的兩本書發現沒有呃,只能百度+看看網上前輩們的程式碼了。   翻了一些比較不錯的文章,瞭解到大概的幾種實現方法:   1.通過RecyclerView中

實現RecyclerViewitem事件的內部監聽器

程式碼如下: public class myViewholder extends RecyclerView.ViewHolder implements View.OnClickListener{ private TextView tv_bookname;

UIWebview獲取網頁所有圖片並加入事件實現瀏覽圖片的效果

- (void)webViewDidFinishLoad:(UIWebView *)aWebView { //調整字號 NSString *str = @"document.getElementsByTagName('body')[0].style.webkitTe

RecyclerView通用adapter以及item事件實現

  今天實現內容如下: 1.實現recyclerview通用的adapter CommonAdapter 2.實現recyclerview item的點選事件 先上效果圖 viewpager+f

Android 螢幕事件實現

在android下,事件的發生是在監聽器下進行,android系統可以響應按鍵事件和觸控式螢幕事件,事件說明如下: 常用實現OnClickListener,OnTouchListener,OnFocu

Recyclerview或Listview實時重新整理item事件失效的解決方法

問題場景: 本人最近在做一個關於藍芽開發的Demo,在掃描藍芽裝置的時候會產生回撥,並會返回BluetoothDevice和rssi,這個rssi就是掃描到的這個裝置的訊號。 注意,這個回撥不是搜尋到1個裝置後就只回調一次這個裝置,而是隻要掃描到了就會回

RecyclerView使用RecyclerView使用增加一個item刪除一個item更新資料item事件

build.gradle compile 'com.android.support:appcompat-v7:24.2.0' compile 'com.android.support:recyclerview-v7:24.2.0' main_a

recyclerview巢狀GridView去遮蔽後者的事件而是前者響應到事件

無論是標題中的巢狀方式,還是其它列表控制元件之間的巢狀,都適用。 1、在GirdView的所在佈局的根佈局中設定改屬性: android:descendantFocusability="blacksDescendants"  2、動態設定GirdView的如下屬性:   gridvi

Android Studio ListView的item事件彈出AlertDialogitem的滑動

首先看看效果圖: 點選彈出AlertDialog的確認框! (一)第一步,建立一個xml檔案顯示item的佈局 student_item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa

js迴圈遍歷ulli的事件給給選中li新增css

功能:對於一個ul中固定的li個數,當點選其中一個li時,改變選中li的顏色;同時改變對應的另一個ul中li的顏色頁面初始化的介面:HTML: <div > <label>其他推薦:</lab