У меня есть список, который заполняется из таблицы SQL. Он работает нормально, за исключением того факта, что он дублирует все записи, когда я пытаюсь удалить строку или вставить новую.
Так что до каких-либо изменений это выглядит как
пункт 1
пункт 2
после вставки или удаления 1 строки становится
пункт 1
пункт 2
пункт 1
пункт 2
Я использую fillData для установки адаптера при каждом изменении списка.
Кажется, это работает нормально для первого вызова fillData (), но последующие вызовы просто читают весь список поверх существующего.
Вот код:
private void fillData() {
int a=0;
todo = dbHelper.fetchAllTodos();
startManagingCursor(todo);
todo.moveToFirst();
while (!todo.isAfterLast()) {
String title=todo.getString(todo.getColumnIndexOrThrow(DbTodoAdapter.KEY_SUMMARY));
String detail=todo.getString(todo.getColumnIndexOrThrow(DbTodoAdapter.KEY_DESCRIPTION));
String priority=todo.getString(todo.getColumnIndexOrThrow(DbTodoAdapter.KEY_CATEGORY));
String alarm=todo.getString(todo.getColumnIndexOrThrow(DbTodoAdapter.KEY_ALARM));
if(alarm!=null) a=1; else a=0;
if(priority.contains("Urgent"))
rd = new RowData(0, title, detail,a,alarm);
if(priority.contains("Medium"))
rd = new RowData(1, title, detail,a,alarm);
if(priority.contains("Low"))
rd = new RowData(2, title, detail,a,alarm);
data.add(rd);
todo.moveToNext();
}
CustomAdapter adapter = new CustomAdapter(this, R.layout.todo_list_row, R.id.title, data);
setListAdapter(adapter);
getListView().setTextFilterEnabled(true);
//adapter.notifyDataSetChanged();
}
private class CustomAdapter extends ArrayAdapter<RowData> {
public CustomAdapter(Context context, int resource, int textViewResourceId, List<RowData> objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder holder=null;
TextView title = null;
TextView detail = null;
ImageView i11=null;
ImageView i12=null;
TextView alarm=null;
RowData rowData= getItem(position);
if(convertView == null){
convertView = mInflater.inflate(R.layout.todo_list_row, null);
holder = newViewHolder(convertView);
convertView.setTag(holder);
}else{
mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
holder = (ViewHolder) convertView.getTag();
}
title = holder.gettitle();
title.setText(rowData.mTitle);
detail = holder.getdetail();
detail.setText(rowData.mDetail);
i11=holder.getImage();
i11.setImageResource(imgid[rowData.mId]);
i12=holder.getImageAl();
i12.setImageResource(imgida[rowData.mIda]);
alarm = holder.getalarm();
alarm.setText(rowData.mAlarm);
return convertView;
}