Android 当listview滚动该时间时,edittext设置默认值
我有带有edittext和-/+按钮的listview。当我点击按钮时,更改edittext值,如递增/递减 当我设置值如5并滚动列表时,查看edittext设置值如默认值如0。 我用这种方式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(
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,试着用我给你的页面上的例子。一切都描述正确。