在RecyclerView ItemClick上更改数据

时间:2016-06-04 17:49:48

标签: android android-recyclerview onitemclicklistener recycler-adapter

这是我的Adapter类我想在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();
}

}

2 个答案:

答案 0 :(得分:0)

尝试将OnClickListenerViewHolder移至onBindViewHolder

答案 1 :(得分:0)

如果您尝试直接填写,那么它将不会在任何地方存储值,并且在循环视图滚动或通知更改时它将从视图中清除您的数据,因此您需要先存储值,然后使用它来显示,我刚刚修改了你的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());
       }