0

Activity A 和 B 包含一个 RecyclerView 并保存类似类型的数据,因此它们使用称为 AViewModel 的通用视图模型

活动 A.java

 @BindingAdapter("bind:adapter")
public static void setAdapter(RecyclerView recyclerView, ArrayList<AViewModel> vm) {
    AdapterA adapter = ((AdapterA) recyclerView.getAdapter());
    if (adapter != null) {
        adapter.clearList();
        adapter.addAll(vm);
        adapter.notifyDataSetChanged();
    }
}

活动 B.java

 @BindingAdapter("bind:adapter")
public static void setAdapter(RecyclerView recyclerView, ArrayList<AViewModel> vm) {
    AdapterB adapter = ((AdapterB) recyclerView.getAdapter());
    if (adapter != null) {
        adapter.clearList();
        adapter.addAll(vm);
        adapter.notifyDataSetChanged();
    }
}

现在启动 Activity A 应用程序崩溃并显示

AdapterA 不能转换为 AdapterB

怀疑 setAdapter 的类似方法签名。有什么建议可以解决问题的原因吗?

错误日志

E/AndroidRuntime:致命异常:主进程:com. .hackthon.listviewpoc,PID:308 java.lang.ClassCastException:com。.hackthon.listviewpoc.AdapterA 无法转换为 com。.hackthon.listviewpoc.AdapterB 在 com.hackthon.listviewpoc.ActivityB.setAdapter(ActivityB.java:39) 在 com.hackthon.listviewpoc.databinding.ActivityABinding.executeBindings(ActivityABinding.java:145) 在 android.databinding.ViewDataBinding。

4

1 回答 1

1

而不是定义两个@BindingAdapter("bind:adapter"),只需编写一次并使用instanceof

@BindingAdapter("bind:adapter")
public static void setAdapter(RecyclerView recyclerView, ArrayList<AViewModel> vm) {
    if(recyclerView.getAdapter() instanceof AdapterA){
        AdapterA adapter = ((AdapterA) recyclerView.getAdapter());
        adapter.clearList();
        adapter.addAll(vm);
        adapter.notifyDataSetChanged();
    }
    else if(recyclerView.getAdapter() instanceof AdapterB){
        AdapterB adapter = ((AdapterB) recyclerView.getAdapter());
        adapter.clearList();
        adapter.addAll(vm);
        adapter.notifyDataSetChanged();

    }
}

让我知道它是否给出任何错误。

于 2017-08-02T05:26:44.107 回答