更改 RecyclerView ItemClick 上的数据

Change data on RecyclerView ItemClick

这是我的适配器 class 我想单击一个 textview,以便在我输入一个值时出现一个对话框,该值存储在 textview 中。这就是我所需要的,但值是在随机位置输入的。

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

}

尝试将您的 OnClickListenerViewHolder 移至 onBindViewHolder

如果你尝试像这样直接填充那么它不会在任何地方存储值,并且在回收视图滚动或通知更改时它会从视图中清除你的数据,所以你需要先存储值然后使用它显示,我刚刚修改了您的 onCLick 方法,如下所示,所以请检查它。

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


                }

然后在onBindViewHolder处也加一行显示数据,如下,

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