這裏是我的情況:onCreateView()等待AsyncTask執行?
在我onCreate()
,我想創建一個AsyncTask
爲服務器檢索數據並將其存儲在一個ArrayList
。
然後在我的onCreateView()
,我希望把這些數據用在ListView
,設置onItemClickListener
等..
的問題是,我創造了AsyncTask
和UI線程之間的競爭。如果AsyncTask
完成檢索前onCreateView()
被調用,那麼我不正確設置適配器,不設置onItemClickListener
,等等
我想一些方法來確保我等待AsyncTask
到在啓動onCreateView()
函數之前完成執行。這可能嗎?我閱讀了有關在任務上使用get()
的消息,但執行它時遇到了一些麻煩。它似乎沒有做任何事情。
我想在onCreate()
檢索數據和onCreateView()
設置適配器(而不是在AsyncTask
的onPostExecute()
設置適配器)的原因,是我想一旦檢索數據,並能夠公正如果用戶旋轉屏幕或導航回Fragment
,則創建視圖。
哦有趣返回。我每次更新適配器時都必須setOnItemClickListener()嗎?或者一開始只有一次?另外,如果視圖尚未創建,我如何初始化onCreate()中的listview?這不會給我一個nullpointerexception? – user2085335 2013-02-21 01:38:25
您只需設置一次「OnItemClickListenter」。要在沒有數據時初始化列表視圖,只需使用沒有元素的'ArrayList'。它不會給出任何NullPointerException。稍後當數據到達時,您可以將它添加到同一個'ArrayList'並調用'notifyDataSetChanged()'。 – sujith 2013-02-21 02:14:42
謝謝!很棒!關於「OnItemClickListener」註釋的一個簡單問題:如果我只在'onCreateView()'中調用'setOnItemClickListener',它似乎不起作用。但是如果我在更新適配器後再向'setOnItemClickListener'添加另一個調用,它就會起作用。這並不是什麼大問題,因爲它是以這種方式工作的,但我想知道爲什麼如果您有任何想法會發生這種情況。謝謝。 – user2085335 2013-02-21 02:45:44