从ViewModel启动DialogFragment的推荐方法是什么?

从ViewModel启动DialogFragment的推荐方法是什么?,第1张

从ViewModel启动DialogFragment的推荐方法是什么?

从概念上讲,ViewModel使我误认为是启动Dialog的错误位置。为了更简洁地执行此 *** 作,我将把RecyclerView.ViewHolder传递到布局中,并在ViewHolder上有一个方法来触发RecyclerView.Adapter上的自定义侦听器。然后,订阅该侦听器(活动/片段)的任何人都可以启动对话框。似乎有些round回,但是我不认为列表项的ViewModel应该了解或控制其环境。

这是一个例子。这是处理带有数据绑定和ViewModel的RecyclerView项目点击的常规模式。这不是一个完整的示例,仅是突出显示此特定模式的代码。

布局:

<layout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    >    <data>    <variable        name="viewHolder"        type="com.example.ViewHolder"        />    <variable        name="viewModel"        type="com.example.ViewModel"        />    </data>    <com.example.View        android:layout_width="match_parent"        android:layout_height="24dp"        android:onClick="@{() -> viewHolder.onClick(viewModel)}"        /></layout>

适配器:

class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {    public interface SelectionListener {        void onSelectionChanged(int newPosition, ViewModel viewModel);    }    private @NonNull WeakReference<SelectionListener> selectionListener = new WeakReference<>(null);    public void setSelectionListener(@Nullable SelectionListener listener) {        selectionListener = new WeakReference<>(listener);    }    public class ViewHolder extends RecyclerView.ViewHolder<ViewBinding> {        ViewHolder(ViewBinding binding) { super(binding.getRoot()); binding.setViewHolder(this); binding.setViewModel(new ViewModel());        }        public void onClick(ViewModel viewModel) { SelectionListener listener = selectionListener.get(); if (listener != null) {     listener.onSelectionChanged(getAdapterPosition(), viewModel); }        }    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5488462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存