2012-06-22 43 views
1

我有一個列表視圖,它使用不同類中的基礎適配器從我的數據庫顯示多個數據。我想每次刪除或添加項目到我的數據庫時刷新我的列表視圖。notifyDataSetChanged()不適合我

這是我的代碼,但它不刷新我的列表視圖。請幫我在哪裏應該把notifyDataSetChanged()

BaseAdapter ad = ((orderadapter)list.getAdapter()); 
ad.notifyDataSetChanged(); 

謝謝。

回答

1

首先我decalre適配器作爲一個全局變量:

 public ListAdapter adapter = null; 

現在我初始化我的ListView(其中我必須把項目)在onCreate()方法。這個列表視圖的佈局是在XML文件中定義:

 listView = (ListView)findViewById(R.id.myList); 

現在,我得到了一個ArrayList中顯示所有的值,然後用此ArrayList初始化適配(你可以使用任何其它數據存儲技術,以及):

 adapter = new ListAdapter(availableMessageNotifications,MessageNotificationActivity.this); 
     listView.setAdapter(adapter); 
     listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

然後我設置onItemClickListener上的列表中的每一個項目:

 OnItemClickListener listener = new OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> adapter, View view, int position,long id) { 
     //your code for an item clicked. 
    } 
    listView.setOnItemClickListener (listener); 

我希望這會幫助你。

你應該從UI線程中調用notifyDataSetChanged():

 yourList.remove(position); 
     runOnUiThread(new Runnable() { 
      public void run() { 
       yourAdapter.notifyDataSetChanged(); 
      } 
     }); 
+0

thnx的回覆 –

+0

我使用BaseAdapter類,以及如何創建一個新的適配器來調用notifyDataSetChanged()?這是我的代碼BaseAdapter adapter =(BaseAdapter)list.getAdapter(); adapter.notifyDataSetChanged(); –

+0

我編輯了我的答案。請看看它是否可以幫助你。 –

1

我臉上有同樣的問題,但現在用下面的代碼來解決。

listView.post(new Runnable() { 
     public void run() { 
     adpater.notifyDataSetChanged(); 
     } 
    });