0

Dies ist meine Adapterklasse Ich möchte auf eine Textansicht klicken, so dass ein Dialogfeld erscheint, wenn ich einen Wert eingabe, der Wert wird in der Textansicht gespeichert. Das ist es, was ich brauche, aber die Werte werden in zufälligen Positionen eingegeben.Daten ändern auf RecyclerView ItemClick

public class myAdapter extends RecyclerView.Adapter<myAdapter.ViewHolder> { 

public List<Student> list; 
static public Context context; 


public myAdapter(List<Student> stdList) { 
    this.list = stdList; 

} 

@Override 
public myAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    context = parent.getContext(); 

    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_item, null); 

    ViewHolder viewHolder = new ViewHolder(itemView); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.name.setText(list.get(position).getSname()); 

} 


class ViewHolder extends RecyclerView.ViewHolder { 

    protected TextView name; 
    protected TextView amt; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     this.name = (TextView) itemView.findViewById(R.id.Name); 
     this.amt = (TextView) itemView.findViewById(R.id.et_amount); 
     this.amt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final int pos = getAdapterPosition(); 
       final AlertDialog.Builder inputAlert = new AlertDialog.Builder(context); 
       inputAlert.setTitle("Pay for picnic"); 
       inputAlert.setMessage("We need the amount to proceed"); 
       final EditText userInput = new EditText(context); 
       userInput.setInputType(InputType.TYPE_CLASS_NUMBER); 
       inputAlert.setView(userInput); 
       inputAlert.setPositiveButton("Submit", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         String userInputValue = userInput.getText().toString(); 
         amt.setText(calc(userInputValue)); 
         notifyItemChanged(pos); 


        } 
       }); 
       inputAlert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }); 
       AlertDialog alertDialog = inputAlert.create(); 
       alertDialog.show(); 

      } 
     }); 
    } 

} 

public String calc(String val) { 

    int i = Integer.parseInt(val); 
    if (i > 850) { 
     Toast.makeText(context, "Incorrect amount", Toast.LENGTH_SHORT).show(); 
    } else { 
     i = 850 - i; 
     Toast.makeText(context, "Successful", Toast.LENGTH_SHORT).show(); 
    } 
    String value = String.valueOf(i); 
    return value; 

} 

@Override 
public int getItemCount() { 
    return list.size(); 
} 

}

+0

Hat ändert es 'this.amt.setText (ber (userInputValue));' arbeiten? Wenn nicht, würde ich empfehlen, den Klick-Listener auf Ihren 'onBindViewHolder' zu verschieben. –

Antwort

0

Wenn Sie direkt dann wie folgt zu füllen versuchen, es wird nicht speichern Wert überall und auf Scroll der Recycling-Ansicht oder Bei Benachrichtigung ändern Sie Ihre Daten aus Sicht, so müssen Sie zunächst Wert speichern und dann verwenden, um anzuzeigen, ich habe gerade Ihre onCLick-Methode wie folgt geändert, so überprüfen Sie es einfach.

 @Override 
     public void onClick(DialogInterface dialog, int which) { 
        String userInputValue = userInput.getText().toString(); 
        amt.setText(calc(userInputValue)); 

        final Student stud = list.get(pos); 
        stud.setAmt(calc(userInputValue)); 
        notifyItemChanged(pos); 


       } 

und fügen Sie dann auch eine Zeile wie unten Daten bei onBindViewHolder anzuzeigen,

 @Override 
     public void onBindViewHolder(ViewHolder holder, int position) 
     { 
      holder.name.setText(list.get(position).getSname()); 
      holder.amt.setText(list.get(position).getAmt()); 
     } 
0

Versuchen Sie bewegen Ihre OnClickListener vom ViewHolder zum onBindViewHolder

+0

Nein, dieser Teil hat keinen Fehler. Der Wert ändert sich, aber wenn ich nach unten scrolle, ändert sich der Wert automatisch. –

+0

haben Sie versucht, Ihren OnClickListener vom ViewHolder zum OnBindViewHolder OP-Objekt –

+0

zu verschieben, hätten Sie viel leichteren Zugriff auf die Position vom onBindViewHolder. –