【问题标题】:How to set nested recycler views adapters when we use data binding?使用数据绑定时如何设置嵌套的回收器视图适配器?
【发布时间】:2019-01-14 06:49:40
【问题描述】:
我有一个嵌套的回收器视图(一个父级和几个子级),我也使用数据绑定。
问题是,由于嵌套回收器的适配器不同,我不知道如何在Kotlin或Java中设置嵌套回收器适配器。
如果我不想使用数据绑定,link 中的解决方案可以正常工作。
谢谢
【问题讨论】:
标签:
android
kotlin
android-recyclerview
android-listview
android-databinding
【解决方案1】:
数据绑定是数据驱动,所以你可以将子适配器放在父模型中,并为recyclerview定义一个数据绑定适配器。
pulic class ParentModel
{
private ChildAdapter childAdapter;
}
public class DataBindingAdapters
{
@BindingAdapter({"adapter"})
public void setRecyclerViewAdapter(RecyclerView recyclerView, ChildAdapter childAdapter)
{
recyclerView.serAdapter(childAdapter);
}
}
<recyclerView
app:adapter="@{model.childAdapter}"/>
【解决方案2】:
使用android数据绑定设置RecyclerView适配器。
布局代码:
数据部分:
<data>
<variable
name="adapter"
type="com.app.adapter.RecyclerViewAdapter" />
</data>
Recyclerview 布局:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:adapter="@{adapter}"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:orientation="vertical"/>
Java 文件:DataBindingAdapters.java
public class DataBindingAdapters {
@BindingAdapter({"adapter"})
public static void setRecyclerViewAdapter(RecyclerView recyclerView,
RecyclerViewAdapter recyclerViewAdapter) {
recyclerView.setAdapter(RecyclerViewAdapter);
}
}
注意:
1.setRecyclerViewAdapter必须是静态的以避免error。
2. 在我的代码中RecyclerViewAdapter 是自定义recyclerview 适配器。
3.在代码或布局文件中设置LayoutManager,但不能同时在两者中设置。(使用android数据绑定时首选Xml)
4. 参考SO post 查询布局管理器相关的问题,比如如何设置androidX、方向、gridview 行等。