![](/img/trans.png)
[英]Send the information get from EditText in Activity 1 to Activity 2 and save into a Recyclerview in Activity 2
[英]How to send text of RecyclerView's EditText to an Activity
我想将EditText的文本值从RecyclerView Adapter发送到Activity。 在我的场景中,我需要在按下按钮时将EditText文本从适配器发送到活动(该按钮在活动类中而不在适配器中)。 在Adapter类的这段代码中,
viewHolder.value.setText(memberUpdate.getAmount());
我已经设置了EditText的值。 现在,我想在单击Button时从此适配器将其获取到Activity类。 要单击的按钮是updateBtn = findViewById(R.id.update_expense_btn);
在Activity类中。 请告诉我如何获取Adapter类到Activity类的EditText的值。
适配器类别:
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));
}
}
}
活动类别:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update_expense);
Intent intent = getIntent();
if (intent.getExtras() != null) {
receipt = intent.getStringExtra("receipt");
Log.d("receiptIntent", receipt);
}
getReference();
}
void getReference() {
updateBtn = findViewById(R.id.update_expense_btn);
updateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
memberAmount = ((AdapterUpdateExpense)recyclerView.getAdapter()).getAmount();
Log.d("memberAmount", memberAmount.toString());
}
});
}
最好实现TextChangeListener,这样,每当用户在编辑文本中编辑值时,都可以将新编辑的值存储在“列表项”中的新变量中,或将其存储在单独的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。
您需要在值EditTexts上使用TextWatcher来设置List<Object> items
对象的值,该值实际上不仅应该是Object
类型,而且至少应该是一些具有setAmount
方法的抽象Member
类型。
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));
然后,编写一种方法来遍历items
并汇总这些值 ,而无需引用任何视图或解析任何内容。
可以在适配器或活动中编写该方法,将列表对象传递给活动
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.