通过实现TextWatcher接口来获取RecyclerView item的EditText的值
2017-06-05 10:16
477 查看
我们在实际开发中,可能会遇到要在列表里面放入一个EditText,但是我们在列表所在的界面获取不到这个EditText的值,所以,这里我们在Adapter里面为EditText添加一个addTextChangedListener,并实现TextWatcher接口来进行监听, 并在Adapter中创建一个接口,用于在列表所在的界面实现其方法获取对应EditText的值,下面我们来看具体的实现过程。
首先是在Adapter里面编写,先新建一个接口
public interface SaveEditListener{
void SavedEdit(int position,String string);
}
然后新建一个类,先实现TextWatcher接口
class TextSwitcher implements TextWatcher{
private MyViewHolder myViewHolder;
public TextSwitcher(MyViewHolder myViewHolder) {
this.myViewHolder = myViewHolder;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
SaveEditListener listener = (SaveEditListener) context;
if (editable!=null){
listener.SavedEdit(Integer.parseInt(myViewHolder.edt_grade.getTag().toString()),editable.toString());
}
}
}这里通过EditText所在的position作为标识,防止发生数据混乱,接着在onBindViewHolder里面为EditText添加监听器,并通过setTag方法将position记录下来
holder.edt_grade.addTextChangedListener(new TextSwitcher(holder));
holder.edt_grade.setTag(position);
这样,Adapter里面的代码就写完了,接下来就是在列表界面实现我们新建的那个接口,并通过map方式将数据put进去
@Override
public void SavedEdit(int position, String string) {
map.put(position,string);
}后面,想要得到对应 EditText的值就可以直接在map中取获取。
所有的实现过程就这样,还是很好理解,但是我在测试的时候发现了一个非常无解的bug,就是如果对应的列表很长的时候,我一条数据一条数据的向下面输入,输到后面会发现,最前面的三个数据会自动填充到最后面的三个EditText上面去,而最前面的三个EditText里面没有数据了,但是我把前面三个的数据重新填上之后提交,发现最后面的三个EditText获取到的数据为空,而最前面那个三个的数据是我第一次填的数据,第二次重新填的那个数据没有起作用,,,,甚是无语。。。。希望有大神可以指导一下,万分感谢
首先是在Adapter里面编写,先新建一个接口
public interface SaveEditListener{
void SavedEdit(int position,String string);
}
然后新建一个类,先实现TextWatcher接口
class TextSwitcher implements TextWatcher{
private MyViewHolder myViewHolder;
public TextSwitcher(MyViewHolder myViewHolder) {
this.myViewHolder = myViewHolder;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
SaveEditListener listener = (SaveEditListener) context;
if (editable!=null){
listener.SavedEdit(Integer.parseInt(myViewHolder.edt_grade.getTag().toString()),editable.toString());
}
}
}这里通过EditText所在的position作为标识,防止发生数据混乱,接着在onBindViewHolder里面为EditText添加监听器,并通过setTag方法将position记录下来
holder.edt_grade.addTextChangedListener(new TextSwitcher(holder));
holder.edt_grade.setTag(position);
这样,Adapter里面的代码就写完了,接下来就是在列表界面实现我们新建的那个接口,并通过map方式将数据put进去
@Override
public void SavedEdit(int position, String string) {
map.put(position,string);
}后面,想要得到对应 EditText的值就可以直接在map中取获取。
所有的实现过程就这样,还是很好理解,但是我在测试的时候发现了一个非常无解的bug,就是如果对应的列表很长的时候,我一条数据一条数据的向下面输入,输到后面会发现,最前面的三个数据会自动填充到最后面的三个EditText上面去,而最前面的三个EditText里面没有数据了,但是我把前面三个的数据重新填上之后提交,发现最后面的三个EditText获取到的数据为空,而最前面那个三个的数据是我第一次填的数据,第二次重新填的那个数据没有起作用,,,,甚是无语。。。。希望有大神可以指导一下,万分感谢
相关文章推荐
- Android开发中动态获取RecyclerView的Item中EditText的内容
- Android实现横屏状态下通过代码弹出EditText并获取焦点弹出软键盘
- Recyclerview item中有EditText使用刷新遇到的坑!!!!!
- 使用TextWatcher实现EditText与TextView同步
- Android实现EditText文本的输入,通过点击按钮,获取输入的内容
- 水平RecyclerView中Item中含有EditText问题
- RecyclerView的item中有EditText的问题
- 解决RecyclerView实现聊天界面,但点击下面的EditText后弹出的输入法会遮盖RecyclerView内容的方法
- RecyclerView + EditText item 复用造成数据混乱
- 当TextView或者EditView的内容发生变化时,其他组件及时给予响应时,我们可以使用TextWatcher来实现。
- 详解Recyclerview item中有EditText使用刷新遇到的坑
- 使用TextWatcher实现EditText与TextView同步
- 使用接口实现RecyclerView中的item点击事件
- RecyclerView中item的EditText的监听
- 使用TextWatcher实现EditText与TextView同步
- 基础向:recyclerView 内嵌 edittext checkbox 焦点获取、数据紊乱以及数据保存问题
- TextWatcher实现EditText与TextView同步
- RecyclerView item 使用editText 输入法乱跳
- Android实现横屏状态下通过代码弹出EditText并获取焦点弹出软键盘
- Android RecyclerView Edittext issue 解决RecyclerView中editext获取焦点紊乱现象