дублирующий список после добавления или удаления строки - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть список, который заполняется из таблицы 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;
  }

1 Ответ

0 голосов
/ 19 декабря 2011

В начале fillData () выполните следующие действия.

data.clear();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...