[英]Getting Databound Item from RecyclerView onClick
我有一個RecyclerView,在Adapter的布局中聲明了一個數據綁定項:
<data>
<variable
name="item"
type="com...myType"/>
<variable
name="handlers"
type="com...myHandlers"/>
</data>
<LinearLayout>
<TextView
android:text="@{item.field}" />
<Button
android:onClick="@{handlers::onClick}" />
</LinearLayout>
一切似乎都已正確設置以調用onClick處理程序,但問題是,它似乎接受的唯一簽名是
public class MyHandlers
{
public void onClick(View view)
{
// Code
}
}
恰恰對我而言確實做了些什么,因為它給我的View是我單擊以獲得onClick
的AppCompatButton
,它沒有有關數據綁定項的信息。 我嘗試過檢查父母的幾個等級,但沒有發現任何可以給我數據綁定項的東西。
如何從onClick
獲取數據綁定項目,以便知道單擊了哪個項目?
您正在使用方法參考 。 使用方法引用時,目標方法的參數應與您使用的偵聽器的參數匹配。 在這種情況下,對於onClick方法,參數是View,因此您的方法必須將View作為參數。 如果要將其他內容傳遞給回調,則應使用偵聽器綁定 。 官方文檔中對此進行了討論。上面給出了一個詳細的示例,我不再贅述,但是我想添加一些內容。 如果不需要view參數,則不必傳遞它。 您可以這樣聲明:
android:onClick="@{() -> handlers.onClick(item)}"
當然,您應該相應地更改onClick方法的參數類型。
創建一個監聽器界面,例如:
1)創建以下界面:
public interface ItemOnClickListener {
void onClickItem(View v, myType item);
}
2)像這樣更改項目布局xml文件:
<layout>
<data>
<variable
name="listener"
type="YOUR_PACKAGE_GOES_HERE.ItemOnClickListener" />
</data>
<Button
android:onClick="@{(v) -> listener.onClickItem(v, item)}" />
</layout>
3)在您的適配器中實現以上接口:
public class MyRecyclerViewAdapter implements ItemOnClickListener
4)覆蓋適配器中的ItemOnClickListener方法
@Override
public void onClickItem(View v, myType item) {
// your code goes here
}
5)最后,在您的onBindViewHolder()
,將偵聽器實例賦予數據綁定:
itemBinding.setListener(this);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.