值从滚动的列表视图中消失 - Android



我有一个从 SimpleCursorAdapter 扩展而来的自定义适配器。使用它,我绑定了一个包含复选框和两个文本框的列表视图。打开活动时,列表显示正常。但是,单击复选框并在文本框中输入一些文本并向下滚动,然后再次向上滚动,数据就会消失。

事实上,任何更改都会消失,即使它们已经被选中。我取消选中它们,然后向下和向上滚动,返回检查。所以基本上,它们会回到检索时的任何状态。

知道为什么吗?谢谢。

您需要有一个列表中每个项目状态的数组列表,然后在每次加载列表项视图时加载这些状态。为此,请在适配器中重写 GetView() 方法,并根据项目位置将保存的状态添加到列表中

Listview 倾向于在每次向上或向下滚动列表时重新创建其视图。您需要某种模型类,可以将复选框和文本框的状态保存在内存中,以防完成某些更改(针对该特定行),然后将其显示在视图中。

如本文中的其他答案所述,您可以使用getview根据列表视图位置以编程方式将存储在模型类中的值诱导到视图中。

像这样的东西

 @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            System.out.println("getView " + position + " " + convertView);
            ViewHolder holder = null;
            if (convertView == null) 
            {
                convertView = mInflater.inflate(R.layout.item1, null);
                holder = new ViewHolder();
                holder.textView = (TextView)convertView.findViewById(R.id.text);
                convertView.setTag(holder);
            } 
           else {
                holder = (ViewHolder)convertView.getTag();
            }
           // Pass on the value to your text view like this. You can do it similarly for a check box as well
            holder.textView.setText(mData.get(position));
            return convertView;
        }

Android 不会一次呈现所有ListView条目,而只会呈现屏幕上可见的条目。当"新"列表行进入视图时

public View getView(int position, View convertView, ViewGroup parent)

调用Adapter的方法并重新创建视图。要填写以前保存的值,您必须覆盖getView方法。

最新更新