这里是我的情况: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