У меня есть ListView
, чьи предметы можно удалить, прокрутив их. Когда элемент прокручивается, его строка базы данных удаляется, а также ее объект в наборе данных адаптера, а также вызывается notifyDataSetChanged()
. Проблема в том, что эти предметы имеют разную высоту - один может быть однострочным, второй может иметь четыре линии. Поэтому, когда у меня есть некоторые элементы в списке, скажем:Перечень элементов списка элементов управления ListView:
1.One линия
2.Two линии
3.Three линии
4.One линия
И второй удаляется, третий идет на свое место (как и ожидалось), но обрезается до двух строк. И когда третий удаляется, высота четвертого элемента увеличивается в соответствии с удаленным элементом.
Я нашел способ исправить это, однако это, вероятно, неверный - он создает новый вид, даже если 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;
}
}