Android 任务完成后设置ListAdapter

Android 任务完成后设置ListAdapter,android,android-asynctask,adapter,listadapter,Android,Android Asynctask,Adapter,Listadapter,在我的代码中,我会这样做 // Start AsyncTask - And load Network data into an Object // Set ListAdapter with Object from Task. 但是,任务在尝试设置ListAdapter之前从未完成,因此它是null 在onPostExecute中设置适配器不是一个选项,因为此任务是它自己的类,用于其他区域 我认为这里的主要问题是任务的异步部分。有更好的方法吗?您可以创建一个侦听器接口,并使您的活动实现该接口。

在我的代码中,我会这样做

// Start AsyncTask - And load Network data into an Object
// Set ListAdapter with Object from Task.
但是,
任务
在尝试设置
ListAdapter
之前从未完成,因此它是
null

onPostExecute
中设置适配器不是一个选项,因为此
任务
是它自己的类,用于其他区域


我认为这里的主要问题是
任务
异步部分。有更好的方法吗?

您可以创建一个侦听器接口,并使您的活动实现该接口。
当asyntask完成时,即在onPostExecute调用中,接口和活动的方法将收到回调(如果已注册)。

您可以创建一个侦听器接口,并使您的活动实现该接口。
当asyntask完成时,即在onPostExecute调用中,如果已注册,接口和活动的方法将收到回调。

将注释转换为应答

您可以在
异步任务
中创建一个
构造函数
,该构造函数将从该
活动
中获取所需的任何
参数
,例如您选择的
上下文
列表适配器
布尔值
。 然后,在创建
AsyncTask
的实例时,可以传入这些
params

MyTask myTask = new MyTask(MainActivity.this, booleanVar);  // passing Context and boolean
myTask.execute();
然后在
AsyncTask
中,您可以检查某个变量是否为
null
或检查
boolean
值,以决定在
onPostExecute()中执行什么操作。


然后,您可以拥有一个
构造函数
,该构造函数为需要使用它的其他
活动
处理一组不同的
参数
,将注释转换为答案

您可以在
异步任务
中创建一个
构造函数
,该构造函数将从该
活动
中获取所需的任何
参数
,例如您选择的
上下文
列表适配器
布尔值
。 然后,在创建
AsyncTask
的实例时,可以传入这些
params

MyTask myTask = new MyTask(MainActivity.this, booleanVar);  // passing Context and boolean
myTask.execute();
然后在
AsyncTask
中,您可以检查某个变量是否为
null
或检查
boolean
值,以决定在
onPostExecute()中执行什么操作。


然后,您可以有一个
构造函数
,它为需要使用它的其他
活动
处理一组不同的
参数

始终在创建ListView后立即设置ListView的适配器(通常,在onCreate或onCreateView中,取决于您的布局)


适配器的内容是另一回事。您可以(也应该)将适配器初始设置为空,并仅在AsyncTask完成时(例如在onPostExecute中)向其添加实际数据。之后,也在onPostExecute中,调用adapter.notifyDataSetChanged()以显示对象。

始终在创建ListView后立即设置ListView的适配器(通常在onCreate或onCreateView中,具体取决于您的布局)


适配器的内容是另一回事。您可以(也应该)将适配器初始设置为空,并仅在AsyncTask完成时(例如在onPostExecute中)向其添加实际数据。之后,在onPostExecute中,也可以调用adapter.notifyDataSetChanged()来显示对象。

onPostExecute是唯一更好的选项。但是我想你已经试过了,为什么你不能把
列表适配器
上下文
发送给类的构造函数,然后在
onPostExecute()
@codeMagic中更新它呢?好吧,我在另一个
活动中使用
任务
,我做的不仅仅是
设置适配器
。。。我正在做的其他一些事情是特定于片段的。。。如果你们说这是我唯一可以尝试移动东西的选择,我想,总是有更多的选择,我只是在想在这种情况下最简单的方法。我知道它用于其他用途,但您可以为带有列表的
Activitites
使用单独的构造函数,这样它就不会影响其他内容。但是,如果它与其他
活动
使用它有很大不同,那么最好使用单独的
异步任务
作为该
活动的内部类
,我理解这一点。减少代码是很好的,但有时你必须考虑哪种方法实际上可以节省头痛。独立的构造器肯定可以工作,但我不知道你有什么比这更重要的。检查
Async
中的
null
s可能需要一些额外的努力,但可能值得一试。对您来说,执行是唯一更好的选择。但是我想你已经试过了,为什么你不能把
列表适配器
上下文
发送给类的构造函数,然后在
onPostExecute()
@codeMagic中更新它呢?好吧,我在另一个
活动中使用
任务
,我做的不仅仅是
设置适配器
。。。我正在做的其他一些事情是特定于片段的。。。如果你们说这是我唯一可以尝试移动东西的选择,我想,总是有更多的选择,我只是在想在这种情况下最简单的方法。我知道它用于其他用途,但您可以为带有列表的
Activitites
使用单独的构造函数,这样它就不会影响其他内容。但是,如果它与其他
活动
使用它有很大不同,那么最好使用单独的
异步任务
作为该
活动的内部类
,我理解这一点。减少代码是很好的,但有时你必须考虑哪种方法实际上可以节省头痛。独立的构造器肯定可以工作,但我不知道你有什么比这更重要的。检查
Async
中的
null
s可能需要额外的努力,但这可能是值得的