0

コンテキストを取得する AsyncTask があります。

public class DownloadDataPromotions extends AsyncTask<Void, Integer, ArrayList<HashMap<String, String>>>
{
    Context context;
    
    public DownloadDataPromotions(Context context) 
    {
        this.context = context;
    }
    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();
    }
    
    @Override
    protected ArrayList<HashMap<String, String>> doInBackground(Void... params)
    {
                ArrayList<HashMap<String, String>> promoList = new ArrayList<HashMap<String, String>>();
        promoList = DownloadingDataFromWebService();
                      ...
                return promoList;
    }
    
    @Override
    protected void onProgressUpdate(Integer... values) 
    {
    
        super.onProgressUpdate(values);
    }
    
    @Override
    protected void onPostExecute(ArrayList<HashMap<String, String>> promoList) 
    {
        super.onPostExecute(promoList);
                 ...
    }
}

次に、この AsyncTask からダウンロードされたすべてのコンテンツをリストに表示するために、それを ListActivity (彼のコンテキストで) に呼び出しています。

しかし今、私はこの AsyncTask に Loader ProgressBar を追加したいと思っています。

これをカスタム ドローアブルを使用してドローアブル コンテンツに入れましたが、AsyncTask がロードされているときに表示し、AsyncTask が終了すると (プログラムで) 消えるようにしたいと考えています。

編集:

これはうまくいきます:

ProgressBar pb = new ProgressBar(TabPromotionsJSONParsingActivity.this);
                LinearLayout ll = (LinearLayout) findViewById(R.id.linearlayoutProgressBar);
                ll.addView(pb);
                pb.setVisibility(View.VISIBLE);

しかし、私が今抱えている問題は、Asynctask が終了したときにそれを停止することです.. DownloadDataPromotions で同じタスクを実行したいのですが、誰かが方法を知っていますか?

4

1 に答える 1

2

onPreExecute メソッドに ProgressBar を作成するコードを追加し、onPostExecute メソッドに非表示にするコードを追加します。以下のようなもの(クラスに追加するコード):

public class DownloadDataPromotions extends AsyncTask<Void, Integer, ArrayList<HashMap<String, String>>>
{
    ProgressBar pb;
        ...
    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();

        pb = new ProgressBar(context);
        LinearLayout ll = (LinearLayout) context.findViewById(R.id.linearlayoutProgressBar);
        ll.addView(pb);
        pb.setVisibility(View.VISIBLE);

    }
    ...
    @Override
    protected void onPostExecute(ArrayList<HashMap<String, String>> promoList) 
    {
        super.onPostExecute(promoList);
        if (pb!=null) {
            ((LinearLayout)pb.getParent()).removeView(pb);
        }
    }
}
于 2012-08-21T11:06:38.740 に答える