这是我的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();
}
}
答案 0 :(得分:0)
尝试将OnClickListener
从ViewHolder
移至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());
}