我有listtext和edittext以及 - / + 按钮。当我点击按钮更改edittext值时,如递增/递减。
当我将值设置为 5 时,将listview的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;
}
答案 0 :(得分: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;
有关如何在列表视图中创建edittext的详细教程,请参阅:http://vikaskanani.wordpress.com/2011/07/27/android-focusable-edittext-inside-listview/
答案 1 :(得分:0)
您错误地使用了ViewHolder模式。因为你有一个包含EditText的小列表,所以你根本不需要它。
正如米洛斯所说,它将回收您的列表项,以便在调用getView()
时将您的值设置为0。您必须保留对值的引用并在getView()
方法中设置它们。