1

ich an einem Projekt arbeite, die gehören Recyclerview und Cursorloader und wenn der Benutzer in recyclerview auf ein Element klickt sollte sie die Daten von Einzelteil erhalten und neue Activity starten .Aber stattdessen wird es mir eine Ausnahme geben Attempt to invoke interface method 'boolean android.database.Cursor.moveToPosition(int)' on a null object referenceAndroid Recyclerview OnClickListener arbeitet nicht mit Cursor

Mein Adapter:

public class Mainrow_Adapter extends CursorRecyclerViewAdapter<Mainrow_Adapter.ViewHolder> 
{ 
    Context context; 
    Cursor cursor; 
    public Mainrow_Adapter(Context context, Cursor cursor) 
    { 
     super(context, cursor); 
     this.cursor = cursor; 
     this.context = context; 
    } 
    @Override 
    public Mainrow_Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.mainrow_layout,parent,false); 
     ViewHolder viewHolder = new ViewHolder(view,context,cursor); 
     return viewHolder; 
    } 
    @Override 
    public void onBindViewHolder(Mainrow_Adapter.ViewHolder viewHolder, final Cursor cursor) 
    { 
     PersonDetails personDetails = PersonDetails.from(cursor); 
     AddLog addLog = new AddLog(); 
     viewHolder.mName.setText(personDetails.getName()); 
     NumberFormat currency = addLog.changeamount(); 
     viewHolder.mAmount.setText(currency.format(personDetails.getAmount())); 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener 
    { 
     TextView mName,mAmount; 

     Context context; 
     Cursor cursor; 
     public ViewHolder(View itemView,Context context,Cursor cursor) { 
      super(itemView); 
      this.context = context; 
      this.cursor = cursor; 
      itemView.setOnClickListener(this); 
      mName = (TextView)itemView.findViewById(R.id.mainrowname); 
      mAmount = (TextView)itemView.findViewById(R.id.mainrowAmount); 
     } 

     @Override 
     public void onClick(View view) { 
      int position = this.getAdapterPosition(); 
      cursor.moveToPosition(position); 
      String name = cursor.getString(1);String mobile = cursor.getString(2); 
      String city = cursor.getString(3);String amount = cursor.getString(5); 
      Intent intent = new Intent(context,ViewLog.class); 
      intent.putExtra("Name",name);intent.putExtra("Mobile",mobile); 
      intent.putExtra("City",city);intent.putExtra("Amount",amount); 
      context.startActivity(intent); 
      Toast.makeText(context,String.valueOf(position), Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

Cursor-Adapter:

ich würde wirklich schätzen, wenn jemand von euch eine bessere Lösung als diese, einen Onclicklistenter zu initiieren und den Cursor auf Items Position zu bekommen.

Danke

Antwort

1

Sie setzen nicht den Cursor auf Ihre viewHolder gerade gesetzt in auf onBindViewHolder Methode

@Override 
public void onBindViewHolder(Mainrow_Adapter.ViewHolder viewHolder, final Cursor cursor) 
{ 
    PersonDetails personDetails = PersonDetails.from(cursor); 
    AddLog addLog = new AddLog(); 
    viewHolder.mName.setText(personDetails.getName()); 
    viewHolder.cursor = cursor; 
    NumberFormat currency = addLog.changeamount(); 
    viewHolder.mAmount.setText(currency.format(personDetails.getAmount())); 
} 

und rufen Sie nicht

cursor.moveToPosition(position); 

in Sie OnClick-Methode.

Und ich bevorzuge, Ihre OnClickListner-Methode in OnBindViewHolder-Methode nicht in ViewHolder-Klasse zu implementieren.