0

いくつかの初期化作業が行われている間、私はいくつかの警告テキストメッセージを与える必要があります。だから私はAndroidアプリケーションの私のメインアクティビティで次のコードを使用しました。

AlertDialog alertDialog;
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.i("main","=================init===============");
    alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setTitle("Title Info");
    alertDialog.setMessage("Initilizing so please wait....");
    alertDialog.show();
    // calling some initilizing function from jni which takes some time
    alertDialog.hide(); 
   }

アプリケーションを実行すると、logcatにログインしましたが、アラートダイアログが表示されません。なぜこれが機能しないのですか?

4

3 に答える 3

5

これは、アラートダイアログに.show()を要求すると、次にシステムが制御を取得したとき(つまり、メソッドが制御をアプリケーションに戻した後)にダイアログを表示するようにフレームワークに指示しているため、表示されるダイアログは表示されないためです。すぐに行われます。

showを呼び出し、すぐにこのメソッド内でhideを実行したため、アプリケーションがダイアログを描画しようとすると、ダイアログの状態は「hide」になります。

ダイアログを表示して後で非表示にする場合は、タイマーやalertDialogからのコールバックなどにより、後でhideを呼び出す必要があります。(また、showとhideをメインスレッドから呼び出していることを確認してください)

于 2013-01-21T13:52:14.983 に答える
2
dialogbox = new Dialog(alertdialog.this);
                dialogbox.setContentView(R.layout.exit_dialog_box);
                dialogbox.setTitle("");
                dialogbox.setCancelable(true);
                Button button = (Button) dialogbox.findViewById(R.id.Button);

                dialogbox.show();
于 2013-01-21T13:54:51.733 に答える
1

これは、AndroidのAsyncTaskメソッドを使用して行うことができます。非同期でクラスを作成する

プライベートクラスShowDialogAsyncTaskはAsyncTaskを拡張します{

    @Override
    protected void onPreExecute() {
        // update the UI immediately after the task is executed
        super.onPreExecute();
        alertDialog = new AlertDialog.Builder(MainClass.this).create();
        alertDialog.setTitle("Title");
        alertDialog.setMessage("msg....");
        alertDialog.show();

    }

    @Override
    protected Void doInBackground(Void... params) {
        //Perform your JNI operation
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);

    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        alertDialog.hide();

    }
}

あなたのクラスで

AlertDialog alertDialog; public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//次のコードを追加します

new ShowDialogAsyncTask()。execute();

}
于 2013-01-22T12:44:18.730 に答える