我需要将两个参数(lv和位置)传递给Asynctask doInBackground方法,但我不知道它是怎么做的......
LoadSound.execute(lv,position)
class LoadSound extends AsyncTask<**[ListView,int]**, String, String>
谢谢!
编辑:
我有一个listView。如果您单击项目播放声音(来自Internet)。
我想用Asynctask显示progressDialog。
在doInBackground方法中,我有itemOnClick:
HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);
因此我需要传递lv和位置。
答案 0 :(得分:22)
尝试在AsyncTask
中创建构造函数,无论何时创建对象,都可以传递参数。
像这样:
MyAsyncTask asynctask = new MyAsyncTask(10, true, myObject);
//this is how you create your object
public class MyAsyncTask extends AsyncTask<Void, Void, Void>{
int a;
boolean b;
Object c;
public MyAsyncTask(int a, boolean b, Object c){
this.a = a;
this.b = b;
this.c = c;
}
@Override
protected Void doInBackground(Void... params) {
if(b)
c = a;
return null;
}
}
然后你可以拨打asynctask.execute();
编辑:在阅读更新后的问题后,我同意Squonk使用服务作为播放背景声音;你也可以在启动你的AsynkTask之前显示一个进度对话框(如果这个是unfinetly)并在你的postexecute上解除它。
答案 1 :(得分:8)
就像this中的回答一样,你可以使用一个对象数组作为参数:
private class LoadSound extends AsyncTask<Object, String, String> {
@Override
protected void doInBackground(Object... params) {
ListView lv = (ListView) params[0];
int position = (Integer) params[1];
}
// ...
}
务必将它们转换为正确的对象类型
这就是如何调用AsyncTask
:
LoadSound loadSound = new LoadSound();
loadSound.execute(lv, position);
答案 2 :(得分:3)
您可以创建一个包含参数的内部类,如下所示:
public static class LoadSoundParam {
public ListView lv;
public int position;
}
class LoadSound extends AsyncTask<LoadSoundParam, String, String> {
...
}
LoadSoundParam param = new LoadSoundParam();
param.lv = lv;
param.position = position;
loadsound.execute(param);
修改强>
正如Squonk在对你的OP的评论中提到的那样,将ListView传递给AsyncTask并不是一个好主意。因此,此代码显示了如何将多个参数传递给AsyncTask,但在您的情况下使用它并不是一个好主意。