Android将ViewHolder从myAdapter for RecyclerView发送到Activity时给出空值

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

我有来自sqlite的Recyclerview客户端活动。它看起来像:

 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();