2012-01-04 45 views
0

我做了一個onTouchListener列表視圖,該列表視圖檢查列表中的哪個項目(字符串在我的案例中)被點擊並且它的位置。我想取出列表中的字符串,所以我創建了一個方法來獲取數組adter的字符串數組和列表被觸摸的poistion,並返回一個相同的新數組,但沒有被觸摸的字符串。現在我想更新列表視圖適配器到新的數組,我該怎麼做? 感謝通過它的onItemListener更改列表視圖

+0

你想要什麼? – 2012-01-04 15:49:15

+0

我沒有看到問號。你在問一個問題嗎? – adneal 2012-01-04 15:50:50

+0

大聲笑,我改變它更清楚 – Someonation 2012-01-04 15:56:49

回答

3

你必須做的是通過BaseAdapter.notifyDatasetChanged集中的變化通知給陣列適配器。 這將刷新整個列表視圖。注意:這必須在主線程中調用。

編輯:

要清除一些混亂,你必須首先獲取從列表視圖適配器。這由calling myListView.getAdapter()完成。所以你可以做

myListView.getAdapter().notifyDatasetChanged() 
+0

好吧,所以我應該寫ListView.BaseAdapter ....或ArrayAdapter.BaseAdapter ... – Someonation 2012-01-04 15:55:45

+0

你寫???。notifyDatasetChanged哪裏???是您給ListView的適配器對象。 – AedonEtLIRA 2012-01-04 15:56:55

+0

好的謝謝,我不能從聽衆那裏做到這一點?那麼是否有一個更簡單的方法,然後通過一個變量或者需要調用這個方法的東西來「通知」這個lisetener的外部? – Someonation 2012-01-04 16:04:26

0

只需調用notifyDataSetChanged()適配器上重新裝入

+0

如果你的意思只是寫在適配器就像你說過的那樣,那麼它給了我這個問題:方法notifyDataSetChanged()是未定義的類型新的AdapterView.OnItemClickListener(){ } – Someonation 2012-01-04 15:52:49

+0

否否,您必須獲取您的ListView的適配器並調用notifyDatasetChanged。 – AedonEtLIRA 2012-01-04 15:55:54

0

你應該嘗試再次在你的適配器中設置數組。

listView.setAdapter(new YourAdapter(this, yourArray)); 
+0

但需要在偵聽器外調用BaseAdapter.notifyDatasetChanged,所以方便性相同,但如果我的陣列非常大,則建議可以是laggi – Someonation 2012-01-04 16:14:40

+0

每個適配器視圖只能有一個適配器。您將不得不從列表視圖中刪除舊的適配器併爲其分配一個新的適配器。總體而言,調用'notifyDataSetChanged()'的效率要低得多(而且耗時更多)。 – AedonEtLIRA 2012-01-04 16:17:13