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可能需要额外的努力,但这可能是值得的