当ListView滚动时,EditText如何设置默认值?

4

我有一个带有编辑文本框和-/+按钮的列表视图。当我点击按钮时,会更改编辑文本框的值,就像增加/减少一样。

当我设置值为5并滚动列表视图时,编辑文本框的值会被设置为默认值0

我是这样使用的:

public View getView(final int position, View convertView,ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View connection;
        final ViewHolder holder;
        connection = new View(context);         
        connection = inflater.inflate(R.layout.list_row_modified, null);
        holder = new ViewHolder();
        holder.up = (Button) connection.findViewById(R.id.btn_plus);
        holder.down = (Button) connection.findViewById(R.id.btn_minus);
        holder.date = (TextView) connection.findViewById(R.id.text_date);

        //onClick with holder.up/holder.down

        connection.setTag(holder);
        return connection;
    }
2个回答

0
你的问题在于每次打开listview时都会调用getView方法(这是正常的),但是当你上下滚动时也会调用该方法。为了减少内存使用,listview将销毁所有在可见部分之外的元素,并在你向后滚动时重新创建它们。
因此,为了避免这种情况,你可以使用:
if (convertView == null) {
    holder = new ViewHolder();
    holder.up = (Button) connection.findViewById(R.id.btn_plus);
    holder.down = (Button) connection.findViewById(R.id.btn_minus);
    holder.date = (TextView) connection.findViewById(R.id.text_date);  
}

convertView.setTag(holder);
return convertView;

如需有关如何在ListView中创建EditText的详细教程,请参见:http://vikaskanani.wordpress.com/2011/07/27/android-focusable-edittext-inside-listview/


尝试使用编辑后的答案中的解决方案。目标是在创建列表视图时只创建一次您的EditText。希望能对您有所帮助。 - Milos Cuculovic
我给你点个赞,这是一个不错的问题。 - Milos Cuculovic
1
应该将“return connection;”更改为“return convertView;”,否则这将无法正常工作。 - Asanka Senavirathna
@Harshid,请尝试使用我给你的页面上的示例。所有内容都有正确的描述。 - Milos Cuculovic

0

你错误地使用了 ViewHolder 模式。由于你的列表很小,且带有 EditText,你甚至根本不需要它。

正如 Milos 所说,它将回收你的列表项,因此当 getView() 被调用时,你的值将被设置为 0。你必须保留一些对这些值的引用,并在 getView() 方法中设置它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接