1
  1. このコードで asynctask を実行する前に、progressdialog 内で回転アニメーションを表示します。

ProgressDialog pDialog = ProgressDialog.show(getActivity(), null, null, true, false); pDialog.setContentView(R.layout.loading);

これはR.layout.loadingxmlです

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ln_loadingcontainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#00000000">

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Large"
        android:layout_gravity="center"/>

    <TextView
        android:id="@+id/tv_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Loading..."
        android:textSize="24dp"
        android:textColor="#ffffff"
        android:layout_marginTop="5dp"
        android:layout_gravity="center"/>
</LinearLayout>
  1. 次に、asynctask を実行します。asynctask doInbackground my ProgressDialog がアニメーションを表示しないときの問題。

  2. asynctask onPostExecute の後、私の ProgressDialog はアニメーションを開始します。

doInbackground で ProgressDialog がアニメーションを表示しないのはなぜですか?

それを解決する方法は?

asynctask 実行前にダイアログ内に回転アニメーションを表示し、asynctask 実行終了後にダイアログを非表示にしたい。

編集

1.global variable of ProgressDialog

private ProgressDialog pDiaalog;

2.in oncreate of activity

gv_table.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        progressDialog = ProgressDialog.show(getActivity(), null, null, true, true);
        progressDialog.setContentView(R.layout.loading);

        MyTask t = new MyTask();
        t.execute();
    }
});

3.MyTask

private class MyTaskextends AsyncTask<String, Void, String>{

    public MyTask(){
    }

    @Override
    protected String doInBackground(String... params) {
        RunExecute();
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        if (pDialog != null) {
            if (pDialog.isShowing())
                pDialog.hide();
        }
    }

    @Override
    protected void onPreExecute() {
        if(IsShowProgress) {
            if (pDialog != null)
                pDialog.show();
        }

        super.onPreExecute();
    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }
}

MyTask doInBackground のとき、progressdialog が回転しません (doInBackground の使用時間は約 5 秒です)。しかし、onPostExecute が終了すると、再び回転が始まります。「pDialog.hide();」を禁止することでテストします onPostExcute;

4

1 に答える 1