2

アクティビティ間の長い移行中に、回転する進行状況バー (またはダイアログ) をインストールするにはどうすればよいですか? AsyncTask を実現するのに役立つソリューションを見てきました - 投稿で述べたように、Android でアクティビティを開始する前に進行状況ダイアログを表示する方法は? 、しかし問題は進行状況バーが回転していないことです。

package expir.java.file;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.Button;

public class ExpirActivity extends Activity {    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);        
        Button mapButton = (Button)findViewById(R.id.first_button);
        mapActivityIntent = new Intent(this, MyMapActivity.class);
        pDialog = new ProgressDialog(this);

        mapButton.setOnClickListener(new View.OnClickListener() {           
            public void onClick(View v) {
                pDialog.setMessage("Loading...");
                new MyTask(pDialog).execute();              
            }   
        });

        Button downloadButton = (Button)findViewById(R.id.second_button);        
        downloadButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {               
                as.DownloadFromUrl("0", "null");;
            }
        }); 
        Button parseButton = (Button)findViewById(R.id.third_button);        
        parseButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {               
                SAXParserCreateDataBase gi = new SAXParserCreateDataBase();
                try {
                    gi.start(ExpirActivity.this);
                } catch (SAXException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (ParserConfigurationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        Button updateButton = (Button)findViewById(R.id.fourth_button);        
        updateButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {               
                SAXParserCreateDataBase gi = new SAXParserCreateDataBase();
                try {
                    gi.update(ExpirActivity.this);
                } catch (ParserConfigurationException e) {
                    e.printStackTrace();
                } catch (SAXException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }); 
    }    

    public class MyTask extends AsyncTask<Void, Void, Void> {
          public MyTask(ProgressDialog progress) {
            this.progress = progress;
          }

          public void onPreExecute() {
            progress.show();
          }

          public Void doInBackground(Void... unused) {
            startActivity(mapActivityIntent);
            return null;            
          }

          public void onPostExecute(Void unused) {
            progress.dismiss();
          }
          ProgressDialog progress;
    }


    DownloadPrimaryDate as = new DownloadPrimaryDate();
    Intent mapActivityIntent;
    ProgressDialog pDialog;
}

アップデート:

LogCat の結果:

FirstActivity.onCreate()

FirstActivity.onStart()

FirstActivity.onResume()

FirstActivity.onPause()

SecondActivity.onCreate()

SecondActivity.onStart()

SecondActivity.onResume()

FirstActivity.onStop()

これは、なぜそうなのかを説明しています。

更新
私が考えていたことに気づきました-アクティビティ間のこの移行を実装するための私の試みのすべてが均等であったわけではありません.

4

1 に答える 1

0

時間がかかるタスクの場所に応じて、これには2つの解決策があります。

長いタスクが最初のアクティビティによって実行される場合、ボタンが押されたときに進行状況ダイアログを作成し、onShowListenerそのダイアログに設定し、onShow コールバックで非同期タスクを開始します。タスクが終了したら、進行状況ダイアログを閉じて、次のアクティビティを開始します。

長いタスクが次のアクティビティによって実行される場合は、アクティビティに単純なレイアウトを設定しonCreateて進行状況ダイアログを作成し、onShowListener を設定して onShow で開始し、AsyncTtask終了したら残りの UI をロードしてダイアログを閉じます。

于 2012-09-10T13:00:04.197 に答える