[英]Passing changing variables to RecyclerView Adapter
我有一個自定義的RecyclerView.Adapter
,用於呈現列表的布局。 在父活動中,我有兩個可以從UI更改的變量。 這些參數用於呈現RecyclerView項的一部分。
我知道我可以通過Adapter構造函數傳遞一些數據,但這是一次性的事情。 如何將數據傳遞到適配器並即時更改它?
使您的適配器實現自定義接口,在其中定義用於傳遞/獲取數據的方法。
您始終可以將所需的任何公共方法添加到適配器,然后直接調用它們。 您可以保存到您的適配器參考您的Activity
或鑄鐵的結果recyclerView.getAdapter()
mAdapter = new YourAdapter();
mRecyclerView.setAdapter(mAdapter);
...
mAdapter.yourCustomMethod(data);
要么
YourAdapter adapter = (YourAdapter) recyclerView.getAdapter();
...
adapter.yourCustomMethod(data);
使用DataBinding
。 使用DataBinding
您可以將類中的字段標記為@Bindable
,然后調用notifyPropertyChanged(BR.field_name)
來更新該屬性的顯示方式。 這是小教程:
class Test extends BaseObservable{
@Bindable
String testString;
...
public void setTestString(String newStr){
this.testString = newStr;
notifyPropertyChanged(BR.testString);
}
...
}
並在您的布局中
<layout
xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="test"
type="com.yout.package.name.Test"/>
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{test.testString}"/>
</FrameLayout>
</layout>
通過這種方式,您可以簡單地遍歷Test
對象的List
並調用setTestString
來更新所有視圖(僅更新相關的TextView
)。 這是有關如何開始使用DataBinding的指南
在您的RecyclerView.Adapter
您有方法notifyItemChanged(int position, Object payload)
。 只需調用此方法並將更新作為payload
參數傳遞即可。 然后是一個onBindViewHolder(VH holder, int position, List<Object> payloads)
,您可以在其中更新視圖。
那就是當您使用RecyclerView.Adapter的notifyDataSetChanged()方法(如docs此處所述 )通過您的UI 立即更新RecyclerView中的數據時。
在適配器內部,您可以添加如下方法:
public void setPropX(yourType propxVal){
mPropX = propXVal; //Set the value of you property
notifyDataSetChanged(); //Redraw all the elements
}
在您的活動中存儲適配器的全局引用,然后在需要時調用上面的函數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.