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

我在中有一个列表对象Recyclerview。长按一个项目时,我要显示一个对话框,其中包含单击的项目中的数据。

所述Recyclerview使用数据的每个项目的结合和我能够显示用Log长按当从所选择的项目数据。

但是,当尝试显示对话框时,您需要转到Activity,建议不要在ViewModel对象中使用。

那么如何显示对话框?

谢谢,Ove

回答:

从概念上讲,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);

}

}

}

}

以上是 从ViewModel启动DialogFragment的推荐方法是什么? 的全部内容, 来源链接: utcz.com/qa/420696.html

回到顶部