Android中Adapter中edittext,checkbox记住状态解决方案(一)



一、问题原因

我们都知道Android中的adapter的view是用了重用机制的,简单地说就是当屏幕中的item占满屏幕以后,我们滑动listview的时候,第一个item退出屏幕,最后一个item进入屏幕

View getView(final int position, View convertView, ViewGroup parent)
这个时候,getview中convertview就不为空了,它的值就是第一个item的view,我们一般都会通过ViewHolder来缓存item,就不用重复findid了,直接就可以使用缓存的控件了。

这个缓存机制就是导致问题出现的根本原因。可能有人就说了,只要不用convertview来缓存不就能解决问题了么。对于这样的解决方案,我只能说,能使用这种方案的都是用屁股在思考问题!

二、问题解决

1.上面有两个问题,分别是editText和checkBox,我们先从简单的来,checkbox只需要考虑两种状态就行了,所以就先解决checkBox

首先用enum来标记下选中和未选中这两种状态

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
AndroidAdapter 实时获取 EditText 的值,可以通过监听 的文本改变事件来实现。以下是一个示例: 1. 首先,在你的 Adapter定义一个接口来监听 EditText 的文本改变事件: ```java public interface EditTextChangeListener { void onTextChanged(int position, String text); } ``` 2. 在 Adapter 添加一个 EditTextChangeListener 成员变量,并提供一个方法用于设置监听器: ```java public class YourAdapter extends RecyclerView.Adapter<YourAdapter.ViewHolder> { private EditTextChangeListener editTextChangeListener; // ... public void setEditTextChangeListener(EditTextChangeListener listener) { this.editTextChangeListener = listener; } // ... } ``` 3. 在 Adapter 的 ViewHolder 类添加一个 TextWatcher,用于监听 EditText 文本改变事件,并在事件发生时调用监听器的回调方法: ```java public class ViewHolder extends RecyclerView.ViewHolder { private EditText editText; public ViewHolder(View itemView) { super(itemView); editText = itemView.findViewById(R.id.edit_text); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (editTextChangeListener != null) { editTextChangeListener.onTextChanged(getAdapterPosition(), s.toString()); } } @Override public void afterTextChanged(Editable s) {} }); } } ``` 4. 最后,在你的 Activity 或 Fragment ,创建 Adapter 的实例,并设置 EditTextChangeListener: ```java YourAdapter adapter = new YourAdapter(); adapter.setEditTextChangeListener(new EditTextChangeListener() { @Override public void onTextChanged(int position, String text) { // 在这里处理 EditText 文本改变事件 // position 是当前 EditText 所在的位置 // text 是 EditText 的当前文本值 } }); ``` 这样,当用户在任何一个 EditText 输入文本时,都会触发监听器的回调方法,你可以在回调方法处理 EditText 的实时值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值