栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从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); }        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496334.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号