2011-12-19 56 views
0

我有一個從SQL表填充的列表視圖。它工作正常,除了它重複所有entrys,當我嘗試刪除一行或插入一個新的事實。添加或刪除行後複製列表

所以之前它看起來任何更改,如

項目1

項目2

插入或刪除1行變得

項目1

項目2

item 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; 
    } 

回答

0

在fillData(開始),請執行下列操作..

data.clear(); 
+0

它的工作,謝謝 – user1106201 2011-12-19 17:17:18