2013-04-22 2 views
0

Я пытаюсь обновить свой ListView при удалении всех элементов. Когда вызывается функция удаления, таблицы sqlite очищаются. эта часть работает нормально. Но я не могу обновить listView. Я попытался notifyDataSetChanged() и invalidate(), но ничего не работает.Обновить ListView не работает

Любые идеи?

public class ResultsAdapter 
     extends BaseAdapter { 

    private LayoutInflater inflater; 

    private ResultsTypeOneOpenHelper resultsTypeOne_db; 
    private ResultsTypeTwoOpenHelper resultsTypeTwo_db; 
    private ResultsTypeThreeOpenHelper resultsTypeThree_db; 


    private ArrayList<Object> results; 

    static class ViewHolder { 
     TextView text; 
    } 

    public ResultsAdapter(Context context) { 
     this.inflater = LayoutInflater.from(context); 

     resultsTypeOne_db = new ResultsTypeOneOpenHelper(context); 
     resultsTypeTwo_db = new ResultsTypeTwoOpenHelper(context); 
     resultsTypeThree_db = new ResultsTypethreeOpenHelper(context); 
     results = new ArrayList<Object>(); 

     /* get results from sqlite */ 
     if (resultsTypeOne_db.getRowCount() != 0) { 
      results.addAll(resultsTypeOne_db.getAllTypeOneResults()); 
     } 
     if (resultsTypeTwo_db.getRowCount() != 0) { 
      results.addAll(resultsTypeTwo_db.getAllTypeTwoResults()); 
     } 
     if (resultsTypeThree_db.getRowCount() != 0) { 
      results.addAll(resultsTypeThree_db.getAllTypeThreeResults()); 
     } 
    } 

    @Override 
    public int getCount() { 
     return results.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     Object item = results.get(position); 
     return item; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View rowView = convertView; 
     ViewHolder viewHolder; 

     if (rowView == null) { 
      rowView = inflater.inflate(R.layout.results_list_row, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) rowView.findViewById(R.id.results_list_textView); 
      rowView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) rowView.getTag(); 
     } 
     viewHolder.text.setText(results.get(position).toString()); 

     return rowView; 
    } 
} 
+0

Действительно ли вы меняете значение своих результатов 'ArrayList''? – dymmeh

+0

похоже, что вы сами заполняете список результатов, убедитесь, что вы очистили его, прежде чем вы вызываете 'notifyDataSetChanged()' (что является правильной функцией для обновления адаптера). – x4rf41

+0

@ x4rf41 вы правы. Я забыл очистить результаты ArrayList. – Kody

ответ

1

Вы можете попробовать позвонить setListAdapter на ListActivity снова. Когда все предметы будут удалены, вызовите метод setListAdapter метода ListActivity/setAdapter на ListView, если вы используете Activity, а не ListActivity.

2

После удаления данных, первый очистить ArrayList, а затем снова получить ваши новые данные и сохранить его в ArrayList, то после метода использования ListView setListAdapter (адаптер)

0

в вашем случае. создать метод в классе ResultsAdapter как:

public void refreshadapter(Context context){ 

resultsTypeOne_db = new ResultsTypeOneOpenHelper(context); 
     resultsTypeTwo_db = new ResultsTypeTwoOpenHelper(context); 
     resultsTypeThree_db = new ResultsTypethreeOpenHelper(context); 
     results.clear(); 

     /* get results from sqlite */ 
     if (resultsTypeOne_db.getRowCount() != 0) { 
      results.addAll(resultsTypeOne_db.getAllTypeOneResults()); 
     } 
     if (resultsTypeTwo_db.getRowCount() != 0) { 
      results.addAll(resultsTypeTwo_db.getAllTypeTwoResults()); 
     } 
     if (resultsTypeThree_db.getRowCount() != 0) { 
      results.addAll(resultsTypeThree_db.getAllTypeThreeResults()); 
     } 
} 

называют этот метод от вашей активности

вам нужно объект для вызова этого метода, который у вас есть уже тогда, когда вы делаете setAdapter()

так, вызовов, с помощью ..

reslutAdapter.refreshadapter(myActivity.this); 
reslutAdapter.notifyDataSetChanged(); 
Смежные вопросы