3

2つのパラメータ(lvとposition)をAsynctask doInBackgroundメソッドに渡す必要がありますが、その方法がわかりません...

LoadSound.execute(lv,position)
class LoadSound extends AsyncTask<**[ListView,int]**, String, String>

ありがとう!

編集:

listViewがあります。アイテムをクリックすると、(インターネットから)サウンドが再生されます。

AsynctaskでprogressDialogを表示したいと思います。

doInBackgroundメソッドには、itemOnClickがあります。

HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);

このため、lvとpositionを渡す必要があります。

4

3 に答える 3

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を起動する前に進行状況ダイアログを表示して(これが不明確な場合)、実行後のダイアログを閉じることもできます。

于 2012-07-04T21:54:52.277 に答える
8

この回答で述べたように、オブジェクトの配列をパラメータとして使用できます。

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);
于 2013-04-04T09:45:12.603 に答える
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に渡す方法を示していますが、状況に応じて使用することはお勧めできません。

于 2012-07-04T21:56:55.883 に答える