ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-保存输入到RecyclerView的EditTexts中的值

2019-11-18 19:27:53  阅读:440  来源: 互联网

标签:android-recyclerview android-edittext android


我有一个RecyclerView,其中每行还具有一个EditText,允许用户输入一个值.

但是,当用户旋转屏幕时,这些值会重置为其默认空白值.

因此,我想将值保存在“列表”或“映射”中,以便在还原时重新填充列表.

但是我不知道如何“遍历当前列表”并获取EditTexts并提取值.

解决方法:

如果以下面的RecyclerView.Adapter实现为例,您会注意到一些事情.包含数据的列表是静态的,这意味着在方向更改时不会重置它.我们在EditText中添加了TextWatcher,以允许我们在修改值时更新值,并且通过在视图中添加标签来跟踪位置.请注意,这是我的特殊方法,有许多解决方法.

演示版

enter image description here

适配器

public class SampleAdapter extends RecyclerView.Adapter{
    private static List<String> mEditTextValues = new ArrayList<>();

    public SampleAdapter(){
        //Mocking content for the editText
        for(int i=1;i<=10;i++){
            mEditTextValues.add("I'm editText number "+i);
        }
        notifyDataSetChanged();
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new CustomViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.edittext,parent,false));
    }
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        CustomViewHolder viewHolder = ((CustomViewHolder)holder);
        viewHolder.mEditText.setTag(position);
        viewHolder.mEditText.setText(mEditTextValues.get(position));
    }
    @Override
    public int getItemCount() {
        return mEditTextValues.size();
    }

    public class CustomViewHolder extends RecyclerView.ViewHolder{
        private EditText mEditText;
        public CustomViewHolder(View itemView) {
            super(itemView);
            mEditText = (EditText)itemView.findViewById(R.id.editText);
            mEditText.addTextChangedListener(new TextWatcher() {
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
                public void afterTextChanged(Editable editable) {}
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                    if(mEditText.getTag()!=null){
                        mEditTextValues.set((int)mEditText.getTag(),charSequence.toString());
                    }
                }
            });
        }
    }
}

(gif看起来好像正在被重置,因为它处于循环中,所以不是)

标签:android-recyclerview,android-edittext,android
来源: https://codeday.me/bug/20191118/2030488.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有