我有一个在Recyclerview
中的对象列表。当长按某个项目时,我想显示一个对话框,其中包含来自所选项目的数据。
Recyclerview
每个项都使用数据绑定,我能够在长按时使用Log显示所选项目的数据。
然而,当尝试显示对话框时,需要获取Activity
,但不建议在ViewModel
对象中使用它。
那么我该如何显示对话框呢?
谢谢,Ove
我有一个在Recyclerview
中的对象列表。当长按某个项目时,我想显示一个对话框,其中包含来自所选项目的数据。
Recyclerview
每个项都使用数据绑定,我能够在长按时使用Log显示所选项目的数据。
然而,当尝试显示对话框时,需要获取Activity
,但不建议在ViewModel
对象中使用它。
那么我该如何显示对话框呢?
谢谢,Ove
<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>
Adapter:
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);
}
}
}
}
context
的变量,您可以使用它。getContext()
的Context。如果有具有该名称的显式变量声明,context变量将被覆盖。”viewModel
,以从那里显示对话框。android:onClick="@{v -> viewModel.showDialog(context)}"
你可以使用 item 的上下文,例如 itemView.getContext()
来显示 AlertDialog
<android.support.v7.widget.CardView
android:id="@+id/cardviewContact"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/text_margin_0.5x"
android:layout_marginRight="@dimen/text_margin_0.5x"
android:layout_marginTop="@dimen/text_margin_0.5x"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:minHeight="50dp"
card_view:cardCornerRadius="4dp"
android:onClick="@{(view) -> viewModel.onClick(view)}" >
android:onClick="@{(view) -> viewModel.onClick(view)}"
语句将当前视图作为参数传递,因此您可以在ViewModel中使用它来获取上下文,如Bayoudh所述,使用view.getContext()
。
android:onClick="@{viewModel::onClick}"
。 - tynn