gpt4 book ai didi

android - 从 ViewHolder 或 ViewHolder 的 ViewModel 访问 RecyclerView.Adapter 的方法

转载 作者:行者123 更新时间:2023-11-29 19:20:45 43 4
gpt4 key购买 nike

我需要从 View Holder 访问 RecyclerView Adapter 的方法。我找不到任何解决方案。

或者是否可以从 ViewHolder 的 ViewModel 类(我已经在 MVVM 模式中为 RecyclerView 的项目定义了一个 viewModel)访问 adpater 的方法(获取适配器的实例)。

问候,哈比卜

最佳答案

感谢大家,这里是代码 fragment 。在 ItemViewModel 类中,我想获取适配器的方法。

适配器 && ViewHolder :

public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {

public class MyViewHolder extends RecyclerView.ViewHolder {
........

public MyViewHolder(View view) {
super(view);
......
}
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
return itemView;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
........
}

@Override
public int getItemCount() {
.........
}
}

list_item.xml :

<?xml version="1.0" encoding="utf-8"?>

<data>
<variable
name="viewModel"
type="program.viewmodel.ItemViewModel" />
</data>

<android.support.v7.widget.CardView
android:id="@+id/cvMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{viewModel.onClickCard()}"
android:onLongClick="@{viewModel.onLongClickCard()}" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingLeft="5dp">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:id="@+id/engM"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:paddingLeft="5dp"
android:text="@{viewModel.engligh}"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>

ItemViewModel 类:

public class ItemViewModel{
private Proverb proverb; //Proverb is model class

public ItemViewModel(Proverb item) {
this.proverb = item;
notifyChange();
}

@Bindable
public String getEngligh() {
return proverb.getEngligh();
}

/**
* click each item
* @return
*/
public View.OnClickListener onClickProverb() {
return new View.OnClickListener() {
@Override
public void onClick(View view) {
// here I need to access adapter's method
}
};
}

/**
* long click listener
* @return
*/
public View.OnLongClickListener onLongClickProverb() {
return new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
// here I need to access adapter's method
return true;
}
};
}
}

关于android - 从 ViewHolder 或 ViewHolder 的 ViewModel 访问 RecyclerView.Adapter 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42560485/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com