在我的代码中,我做了类似的事情
// Start AsyncTask - And load Network data into an Object
// Set ListAdapter with Object from Task.
但是,Task
在ListAdapter
尝试设置之前永远不会完成,因此它是null
。
在onPostExecute
中设置适配器不是一个选项,因为此Task
是它自己的类,并在其他区域中使用。
我认为这里的主要问题是Async
的{{1}}部分。有没有更好的方法来做到这一点?
答案 0 :(得分:2)
您可以创建一个侦听器界面,并使您的活动实现该界面。 当asyntask完成时,即在onPostExecute中调用接口的方法,如果已注册,活动将接收回调。
答案 1 :(得分:1)
将评论转换为答案
您可以在constructor
中创建AsyncTask
params
,其中Activity
需要Context
ListAdapter
,例如boolean
和{{1}您选择的或AsyncTask
。
然后,当您创建params
的实例时,您可以传递这些MyTask myTask = new MyTask(MainActivity.this, booleanVar); // passing Context and boolean
myTask.execute();
AsyncTask
然后在您的null
中,您可以检查某个变量是boolean
还是检查onPostExecute()
值,以决定在constructor
然后,您可以params
为需要使用它的其他Activities
处理另一组{{1}}
答案 2 :(得分:0)
创建ListView后,请立即设置ListView的适配器(通常在onCreate或onCreateView中,具体取决于您的布局)。
适配器的内容是另一回事。您可以(并且应该)使您的适配器最初为空,并仅在AsyncTask完成时向其添加实际数据,例如在onPostExecute中。之后,同样在onPostExecute中,调用adapter.notifyDataSetChanged()来显示对象。