簡體   English   中英

從RecyclerView onClick獲取數據綁定項

[英]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是我單擊以獲得onClickAppCompatButton ,它沒有有關數據綁定項的信息。 我嘗試過檢查父母的幾個等級,但沒有發現任何可以給我數據綁定項的東西。

如何從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM