我想从RecyclerView Adapter将EditText的文本值发送到Activity。在我的场景中,我需要在按下按钮时将EditText文本从Adapter发送到Activity(该按钮在Activity类中不在Adapter中)。在这个Adapter类的代码中,
Fabric
我设置了EditText的值。现在我想在点击Button时从此适配器获取此值到Activity类。要点击的按钮是Activity类中的viewHolder.value.setText(memberUpdate.getAmount());
。请告诉我如何获得EditText的值,它是Adapter类的Activity类。
适配器类:
updateBtn = findViewById(R.id.update_expense_btn);
活动类:
class AdapterUpdateExpense extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final int MEMBERUPDATE = 4;
private List<Object> items;
private Context context;
private Activity activity;
private boolean isEvenlyRadioChecked;
private Double amount = 0.0;
AdapterUpdateExpense(Activity activity, Context context, List<Object> items, boolean isEvenlyRadioChecked) {
this.activity = activity;
this.context = context;
this.items = items;
this.isEvenlyRadioChecked = isEvenlyRadioChecked;
}
@Override
public int getItemViewType(int position) {
if (items.get(position) instanceof MemberUpdate) {
return MEMBERUPDATE;
}
return -1;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
RecyclerView.ViewHolder holder = null;
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
switch (viewType) {
case MEMBERUPDATE:
View v4 = inflater.inflate(R.layout.update_expense_layout, viewGroup, false);
holder = new holderMemberUpdate(v4);
break;
}
return holder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
switch (viewHolder.getItemViewType()) {
case MEMBERUPDATE:
holderMemberUpdate view4 = (holderMemberUpdate) viewHolder;
configureHolderMemberUpdate(view4, position);
break;
}
}
private void configureHolderMemberUpdate(final holderMemberUpdate viewHolder, final int position) {
final MemberUpdate memberUpdate = (MemberUpdate) items.get(position);
if (memberUpdate != null) {
viewHolder.name.setText(memberUpdate.getTitle());
viewHolder.value.setText(memberUpdate.getAmount());
}
amount+= Double.valueOf(viewHolder.value.getText().toString());
Log.d("sdfsdfah", getAmount().toString());
}
class holderMemberUpdate extends RecyclerView.ViewHolder{
TextView name;
EditText value;
holderMemberUpdate(View view) {
super(view);
name = view.findViewById(R.id.member_name_txtview);
value = view.findViewById(R.id.member_expense_edittxt);
if(isEvenlyRadioChecked) {
value.setEnabled(false);
} else {
value.setEnabled(true);
value.setTextColor(context.getResources().getColor(R.color.colorAccent));
}
}
}
答案 0 :(得分:1)
您最好实现TextChangeListener,因此每当用户编辑编辑文本中的值时,您都可以将新编辑的值存储在List项目中的新变量中,或者存储一个单独的hashamp。
//Hashmap to store edited amount. Is static to access this in Activity class.
public static HashMap<Integer,String> newAmountHashMap = new HashMap<Integer, String>();
class holderMemberUpdate extends RecyclerView.ViewHolder{
TextView name;
EditText value;
holderMemberUpdate(View view) {
super(view);
name = view.findViewById(R.id.member_name_txtview);
value = view.findViewById(R.id.member_expense_edittxt);
value.addTextChangedListener(new MyCustomEditTextListener(this));
if(isEvenlyRadioChecked) {
value.setEnabled(false);
} else {
value.setEnabled(true);
value.setTextColor(context.getResources().getColor(R.color.colorAccent));
}
}
}
//文本更改侦听器
private class MyCustomEditTextListener implements TextWatcher {
private int position;
public void updatePosition(int position) {
this.position = position;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
// no op
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void afterTextChanged(Editable editable) {
newAmountHashMap.put(position, editable.toString());
}
}
最后,您应该在Activity中按下按钮处理HashMap。
答案 1 :(得分:1)
你需要一个TextTexts值的TextWatcher,它将设置List<Object> items
中对象的值,这不应该只是Object
类型,而是至少一些抽象的Member
类型使用setAmount
方法。
private void configureHolderMemberUpdate(final holderMemberUpdate viewHolder, final int position) {
final MemberUpdate memberUpdate = (MemberUpdate) items.get(position);
if (memberUpdate != null) {
viewHolder.name.setText(memberUpdate.getTitle());
viewHolder.value.setText(memberUpdate.getAmount());
}
// Add this
viewHolder.value.addTextChangedListener(...
在文本观察者中,
items.get(position).setAmount(Double.parseDouble(text));
How to use the TextWatcher class in Android?
然后,编写一个方法来循环items
并求和这些值,而不引用任何视图或解析任何内容。
该方法可以写在适配器或活动中,您将列表对象传递给活动