Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当listview滚动该时间时,edittext设置默认值_Android_Android Layout_Listview_Scrollview - Fatal编程技术网

Android 当listview滚动该时间时,edittext设置默认值

Android 当listview滚动该时间时,edittext设置默认值,android,android-layout,listview,scrollview,Android,Android Layout,Listview,Scrollview,我有带有edittext和-/+按钮的listview。当我点击按钮时,更改edittext值,如递增/递减 当我设置值如5并滚动列表时,查看edittext设置值如默认值如0。 我用这种方式 public View getView(final int position, View convertView,ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(

我有带有edittext和-/+按钮的listview。当我点击按钮时,更改edittext值,如递增/递减

当我设置值如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;
    }

本例中的问题是,每次打开listview(这很好)时,都会调用getView,但上下滚动时也会调用getView。为了减少内存使用,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;

有关如何在listview中创建edittext的详细教程,请参阅:

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


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

尝试编辑答案中的解决方案。目标是仅在第一次创建listview时创建edittext。希望对你有帮助。我的回答是a+1,回答这个好问题。返回连接;应更改为返回convertView。否则这就不行了work@AsankaSenavirathna,你说得对,我编辑了我的答案。谢谢。@Harshid,试着用我给你的页面上的例子。一切都描述正确。