栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Android ListView中包含的EditText的内容未保存

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android ListView中包含的EditText的内容未保存

为了加快大多数移动应用程序(Android iOS
…)的运行速度,通常会回收列表单元格。这样可以节省内存,尤其是对于较长的列表。因此,您必须获取新显示的单元格的数据。当单元超出屏幕时,其布局/视图将被破坏。在您的情况下,您必须将编辑文本的文本保存在某处。这就是您要对哈希图执行的操作。

我看不到您的代码中有任何特别的错误。

如果问题是关于使用哈希图的“解决方法”,那么我确认对我而言,保存编辑文本的状态取决于您。使用哈希图是一种实现方式。

顺便说一下,

getItem(position).id
可以
getItemId(position)
为此替换此处。

不确定是否所有这些都能回答您的问题。

编辑

现在,我已经正确理解了您的问题,我可以提供一些代码。我必须说,我对找到的解决方案不完全满意,但至少可以正常使用。

TextWatcher的问题在于您无权访问上下文和相应的视图。

使用setOnFocusChangeListener解决了该问题。所以这是我终于开始工作的代码。

public final class PointVerificationAdapter extends baseAdapter {    List<BasicNamevaluePair> mObjects;    Context mContext;    LayoutInflater mInflater;    HashMap<Integer, String> mReponsesActuel;    ArrayList<String> myItems = new ArrayList<String>();    public PointVerificationAdapter( Context context, List<BasicNamevaluePair> listObjets ) {        this.mInflater = LayoutInflater.from(context);        this.mContext = context;        this.mObjects = listObjets;        for (int i = 0; i < 30; i++) { myItems.add(Integer.toString(i));        }    }    @Override    public int getCount() {        return mObjects.size();    }    @Override    public BasicNamevaluePair getItem(int position) {        return mObjects.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    static class ViewHolder {        EditText yourEditText;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        if (convertView == null)        { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.intervention_reponses_controle_nombre, parent, false); convertView.setId(position); holder.yourEditText = (EditText) convertView.findViewById(R.id.edValeur); convertView.setTag(holder);        }        else        { holder = (ViewHolder) convertView.getTag();        }        ((TextView) convertView.findViewById(R.id.tvNom)).setText(Integer.toString(position));        holder.yourEditText.setText(myItems.get(position));        holder.yourEditText.setId(position);        holder.yourEditText.setonFocusChangeListener(new onFocusChangeListener() { public void onFocusChange(View view, boolean hasFocus) {     if (!hasFocus){         final int position = view.getId();         final EditText editText = (EditText) view;         myItems.set(position, editText.getText().toString());     } }        });        return convertView;    }}

最终编辑

之前的代码可以工作,但我对此不满意,因为您要求

addTextChangedListener
而不是
onFocusChange

所以这是解决方案:

public final class PointVerificationAdapter extends baseAdapter {    List<BasicNamevaluePair> mObjects;    Context mContext;    LayoutInflater mInflater;    HashMap<Integer, String> mReponsesActuel;    ArrayList<String> myItems = new ArrayList<String>();    public PointVerificationAdapter( Context context, List<BasicNamevaluePair> listObjets ) {        this.mInflater = LayoutInflater.from(context);        this.mContext = context;        this.mObjects = listObjets;        for (int i = 0; i < 30; i++) { myItems.add(Integer.toString(i));        }    }    @Override    public int getCount() {        return mObjects.size();    }    @Override    public BasicNamevaluePair getItem(int position) {        return mObjects.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    static class ViewHolder {        EditText yourEditText;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        if (convertView == null)        { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.intervention_reponses_controle_nombre, parent, false); convertView.setId(position); holder.yourEditText = (EditText) convertView.findViewById(R.id.edValeur); holder.yourEditText.setId(position); holder.yourEditText.addTextChangedListener(new GenericTextWatcher(holder.yourEditText)); convertView.setTag(holder);        }        else        { holder = (ViewHolder) convertView.getTag(); holder.yourEditText.setId(position);        }        ((TextView) convertView.findViewById(R.id.tvNom)).setText(Integer.toString(position));        holder.yourEditText.setText(myItems.get(position));        return convertView;    }    private class GenericTextWatcher implements TextWatcher{        private View view;        private GenericTextWatcher(View view) { this.view = view;        }        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}        public void afterTextChanged(Editable editable) { final int position = view.getId(); final EditText editText = (EditText) view; myItems.set(position, editText.getText().toString());        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438388.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号