[英]access RecyclerView.Adapter's method from ViewHolder or ViewModel of ViewHolder
I need to access a method of RecyclerView Adapter from View Holder. 我需要从View Holder访问RecyclerView Adapter的方法。 I don't find any solution for this. 我没有找到任何解决方案。
Or is it possible to access adpater'method(get an instance of adapter) from ViewModel class (I've defined a viewModel for items of RecyclerView in MVVM pattern) of ViewHolder. 或者可以从ViewHolder的ViewModel类(我已经为MVVM模式中的RecyclerView项定义了viewModel)访问adpater'方法(获取适配器的实例)。
Regards, Habib 问候,哈比卜
Thanks to all, here is code snippets. 多亏了所有这些,这里是代码片段。 in ItemViewModel class I want to get adapter's methods. 在ItemViewModel类中,我想获取适配器的方法。
Adapter && ViewHolder : 适配器&& 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 : 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 class : 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;
}
};
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.