4

我有带有 edittext 和-/+按钮的列表视图。当我单击按钮更改 edittext 值时,例如increment/decrement

当我将值设置为5并滚动列表视图时,edittext 将值设置为默认值,例如 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;
    }
4

2 回答 2

0

您错误地使用了 ViewHolder 模式。因为您有一个带有 EditText 的小列表,所以您甚至不需要它。

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

于 2013-01-23T12:12:00.737 回答
0

在你的情况下的问题是你的 getView 被称为你打开你的列表视图的每个 tiem (这很好),而且当你向上/向下滚动时。为了减少内存使用,listview 会销毁所有在 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;

有关如何在列表视图中创建编辑文本的详细教程,请参阅: http ://vikaskanani.wordpress.com/2011/07/27/android-focusable-edittext-inside-listview/

于 2013-01-23T12:04:53.380 回答