




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Adapter中如何為RecyclerView添加單擊事件
Adapter中如何為RecyclerView添加單擊事件,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。RecyclerView的每個(gè)Item的點(diǎn)擊事件并沒有像ListView一樣封裝在組件中,需要Item的單擊事件時(shí)就需要自己去實(shí)現(xiàn),在Adapter中為RecyclerView添加單擊事件參考如下:在RecyclerView的Adapyer中定義單擊事件的回調(diào)接口:/**
*
定義
RecyclerView
選項(xiàng)單擊事件的回調(diào)接口
*/
public
interface
OnItemClickListener{
//參數(shù)(父組件,當(dāng)前單擊的View,單擊的View的位置,數(shù)據(jù))
void
onItemClick(RecyclerView
parent,View
view,
int
position,
String
data);
}在RecyclerView的Adapyer中聲明該接口,并提供setter方法:private
OnItemClickListener
onItemClickListener;
public
void
setOnItemClickListener(OnItemClickListener
onItemClickListener){
this.onItemClickListener
=
onItemClickListener;
}在RecyclerView的Adapyer類實(shí)現(xiàn)View.OnClickListener接口,并重寫onClick(Viewview)方法,然后設(shè)置給接口的事件監(jiān)聽:public
class
RvAdapter1
extends
RecyclerView.Adapter<RvAdapter1.DataViewHolder>
implements
View.OnClickListener{
...
view.setOnClickListener(this);//設(shè)置監(jiān)聽器
...
@Override
public
void
onClick(View
view)
{
//根據(jù)RecyclerView獲得當(dāng)前View的位置
int
position
=
recyclerView.getChildAdapterPosition(view);
//程序執(zhí)行到此,會去執(zhí)行具體實(shí)現(xiàn)的onItemClick()方法
if
(onItemClickListener!=null){
onItemClickListener.onItemClick(recyclerView,view,position,mList.get(position));
}
}
...
}在MainActivity中通過Adapter設(shè)置每個(gè)Item的單擊事件:adapter.setOnItemClickListener(new
RvAdapter1.OnItemClickListener()
{
@Override
public
void
onItemClick(RecyclerView
parent,
View
view,
int
position,
String
data)
{
Toast.makeText(MainActivity.this,
data,
Toast.LENGTH_SHORT).show();
}
});/**
*
Created
by
jzman
on
2017/5/13
0013.
*
RecycleView的Adapter
*/
public
class
RvAdapter1
extends
RecyclerView.Adapter<RvAdapter1.DataViewHolder>
implements
View.OnClickListener{
private
Context
mContext;
private
RecyclerView
recyclerView;
private
ArrayList<String>
mList;
public
RvAdapter1()
{}
public
RvAdapter1(Context
mContext,
ArrayList<String>
mList)
{
this.mContext
=
mContext;
this.mList
=
mList;
}
/**
*
用于創(chuàng)建ViewHolder
*
@param
parent
*
@param
viewType
*
@return
*/
@Override
public
DataViewHolder
onCreateViewHolder(ViewGroup
parent,
int
viewType)
{
View
view
=
LayoutInflater.from(mContext).inflate(R.layout.item,null);
view.setOnClickListener(this);
//使用代碼設(shè)置寬高(xml布局設(shè)置無效時(shí))
view.setLayoutParams(new
ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
DataViewHolder
holder
=
new
DataViewHolder(view);
return
holder;
}
/**
*
綁定數(shù)據(jù)
*
@param
holder
*
@param
position
*/
@Override
public
void
onBindViewHolder(DataViewHolder
holder,
int
position)
{
holder.tv_data.setText(mList.get(position));
}
/**
*
選項(xiàng)總數(shù)
*
@return
*/
@Override
public
int
getItemCount()
{
return
mList.size();
}
@Override
public
void
onClick(View
view)
{
//根據(jù)RecyclerView獲得當(dāng)前View的位置
int
position
=
recyclerView.getChildAdapterPosition(view);
//程序執(zhí)行到此,會去執(zhí)行具體實(shí)現(xiàn)的onItemClick()方法
if
(onItemClickListener!=null){
onItemClickListener.onItemClick(recyclerView,view,position,mList.get(position));
}
}
/**
*
創(chuàng)建ViewHolder
*/
public
static
class
DataViewHolder
extends
RecyclerView.ViewHolder{
TextView
tv_data;
public
DataViewHolder(View
itemView)
{
super(itemView);
tv_data
=
(TextView)
itemView.findViewById(R.id.tv_recycle);
}
}
private
OnItemClickListener
onItemClickListener;
public
void
setOnItemClickListener(OnItemClickListener
onItemClickListener){
this.onItemClickListener
=
onItemClickListener;
}
/**
*
定義RecyclerView選項(xiàng)單擊事件的回調(diào)接口
*/
public
interface
OnItemClickListener{
//參數(shù)(父組件,當(dāng)前單擊的View,單擊的View的位置,數(shù)據(jù))
void
onItemClick(RecyclerView
parent,View
view,
int
position,
String
data);
}
/**
*
將RecycleView附加到Adapter上
*/
@Override
public
void
onAttachedToRecyclerView(RecyclerView
recyclerView)
{
super.onAttachedToRecyclerView(recyclerView);
this.recyclerView=
recyclerView;
}
/**
*
將RecycleView從Adapter解除
*/
@Override
public
void
onDetachedFromRecyclerView(RecyclerView
recyclerView)
{
super.onDetachedFromRecyclerView(recyclerView);
this.recyclerView
=
null;
}
}/**
*
Created
by
jzman
on
2017/5/13
0013.
*/
public
class
MainActivity
extends
AppCompatActivity
{
private
RecyclerView
rv;
RvAdapter1
adapter;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rv
=
(RecyclerView)
findViewById(R.id.rv);
//設(shè)置布局管理器
//
rv.setLayoutManager(new
LinearLayoutManager(this));//線性
rv.setLayoutManager(new
GridLayoutManager(this,4));//線性
//
rv.setLayoutManager(new
StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));//線性
adapter
=
new
RvAdapter1(this,initData());
adapter.setOnItemClickListener(new
RvAdapter1.OnItemClickListener()
{
@Override
public
void
onItemClick(RecyclerView
parent,
View
view,
int
position,
String
data)
{
Toast.makeText(MainActivity.this,
data,
Toast.LENGTH_SHORT).show()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 批發(fā)業(yè)務(wù)中的版權(quán)合作與版權(quán)輸出考核試卷
- 其他調(diào)味品發(fā)酵制品制造考核試卷
- 智能照明在博物館展品照明中的應(yīng)用考核試卷
- 企業(yè)知識管理與知識分享考核試卷
- 年金保險(xiǎn)投資渠道選擇考核試卷
- 有機(jī)肥料在育苗中的應(yīng)用考核試卷
- 冰球場冰面修整與保養(yǎng)考核試卷
- 智能無人機(jī)飛行控制系統(tǒng)考核試卷
- 小學(xué)生簡單律動課件圖片
- 廣州鋪位租賃合同范本
- 2022版ISO27001信息安全管理體系基礎(chǔ)培訓(xùn)課件
- 新版高中物理必做實(shí)驗(yàn)?zāi)夸浖捌鞑?(電子版)
- 售后服務(wù)部部門組織架構(gòu)
- 《實(shí)變函數(shù)》電子教案
- (正式版)SHT 3551-2024 石油化工儀表工程施工及驗(yàn)收規(guī)范
- 二次函數(shù)(最全的中考二次函數(shù)知識點(diǎn)總結(jié))
- 機(jī)械基礎(chǔ) 第2版全書電子教案
- 醫(yī)療設(shè)備清單
- 3844電源的原理及維修
- 智能辦公室方案PPT課件
- 職員簽到簿員工簽到表
評論
0/150
提交評論