Android将ViewHolder从myAdapter for RecyclerView发送到Activity时给出空值
我有来自sqlite的Recyclerview客户端活动。它看起来像:Android将ViewHolder从myAdapter for RecyclerView发送到Activity时给出空值,android,android-recyclerview,Android,Android Recyclerview,我有来自sqlite的Recyclerview客户端活动。它看起来像: public class KlientAdapter extends RecyclerView.Adapter<KlientAdapter.ViewHolder> { private Cursor cursor; ViewHolder staryHolder; public class ViewHolder extends RecyclerView.ViewHold
public class KlientAdapter extends RecyclerView.Adapter<KlientAdapter.ViewHolder> {
private Cursor cursor;
ViewHolder staryHolder;
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView TextViewImie;
public TextView TextViewNazwisko;
public ViewHolder(View v) {
super(v);
TextViewImie = (TextView)v.findViewById(R.id.TextViewImie);
TextViewNazwisko = (TextView)v.findViewById(R.id.TextViewNazwisko);
}
}
public KlientAdapter(Cursor c) {
cursor = c;
}
public Cursor getCursor(){
return cursor;
}
public ViewHolder getHolder(){
return staryHolder;
}
@Override
public KlientAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_klienci, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
cursor.moveToPosition(position);
holder.TextViewImie.setText(cursor.getString(1));
holder.TextViewImie.setId(cursor.getInt(0));
holder.TextViewNazwisko.setText(cursor.getString(2));
holder.TextViewImie.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
rowKlik(holder,position);
}
});
holder.TextViewNazwisko.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
rowKlik(holder,position);
}
});
}
@Override
public int getItemCount() {
return cursor.getCount();
}
public void rowKlik(ViewHolder holder, int p){
if(staryHolder != null){
staryHolder.TextViewImie.setBackgroundResource(R.drawable.cell_shape);
staryHolder.TextViewImie.setSelected(false);
staryHolder.TextViewNazwisko.setBackgroundResource(R.drawable.cell_shape);
staryHolder.TextViewNazwisko.setSelected(false);
}
holder.TextViewImie.setBackgroundResource(R.drawable.cell_shape_pressed);
holder.TextViewImie.setSelected(true);
holder.TextViewNazwisko.setBackgroundResource(R.drawable.cell_shape_pressed);
holder.TextViewNazwisko.setSelected(true);
staryHolder = holder;
}
}
它很好用。在我的DetailActivity中,我还使用了RecyclerView,我使用的DetailAdapter基本上是相同的,只是与我的db中的数据不同。它正确地更改了后台资源,但当我尝试从我的DetailActivity使用时
ViewHolder viewHolder = DetailAdapter.getHolder();
它给我空值,但当我在rowKlick方法中使用Log来获取关于holder的信息时,它不是空值,所以我不能编辑Klient的详细信息。我不知道问题出在哪里。有什么想法吗?你必须设计观察者设计模式,在这个模式中,你必须在ViewHolder中设置onClicklistener,当点击任何单元格时,你的监听器将捕获ViewHolder中的数据并传递给你的活动。非常感谢我添加了观察者,一切都很完美。现在,我试图弄明白,在没有观察者的情况下,它如何在我的客户活动中正常工作。唯一的区别是CliectActivity是我的主要活动…BDZ,您是否遇到过与observer相关的任何问题?您正在使用最佳实践来实现所需的功能。
ViewHolder viewHolder = DetailAdapter.getHolder();