У меня есть ListView
, элементы которого можно удалять, проводя по ним пальцем. Когда элемент считывается, его строка базы данных удаляется, а также его объект в наборе данных адаптера, а также вызывается notifyDataSetChanged()
. Проблема в том, что эти элементы имеют разную высоту — один может быть однострочным, второй может состоять из четырех строк. Итак, когда у меня есть некоторые элементы в списке, скажем:
1.Одна линия
2. Две линии
3.Три линии
4.Одна линия
А второй удаляется, третий идет на свое место (как и положено), но обрезается до двух строк. И когда третий элемент удаляется, высота четвертого элемента увеличивается, чтобы соответствовать удаленному элементу.
Я нашел способ исправить это, однако, вероятно, он неправильный - он создает новое представление, даже если convertView не равен нулю.
Интересно, можно ли этого добиться другим, безопасным для вторичной переработки способом.
Текущий код адаптера:
public class CounterItemAdapter extends BaseAdapter{
private Activity activity;
private ArrayList<CounterItem> data;
private SQLiteOpenHelper helper;
private static LayoutInflater inflater = null;
public CounterItemAdapter(Activity activity, ArrayList<CounterItem> data, SQLiteOpenHelper helper) {
this.activity = activity;
this.data = data;
this.helper = helper;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return data.size();
}
@Override
public CounterItem getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return getItem(position).getId();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
//if(convertView == null)
view = inflater.inflate(R.layout.counter_list_item, null);
TextView nameView = (TextView)view.findViewById(R.id.nameView);
//other, unrelated views were here
final CounterItem counterItem;
counterItem = getItem(position);
nameView.setText(counterItem.getName());
return view;
}
}