1


今日私が抱えている問題はスレッドに関するものです。Androidのアクティビティで、メッセージ、アイコン、タイトル、3つのボタン(ポジティブ、ネガティブ、ニュートラル)を含むダイアログを表示したいのですが、エラーは発生していません(さらにリスナーとそのすべて)、私はエラーなしで何度も正​​しく実行します、問題はこれにあります:

    alert.setPositiveButton("Yes", new android.content.DialogInterface.OnClickListener(){
        public void onClick(DialogInterface i, int j)
        {

            pb.setVisibility(0); //pb is a progress bar
            new Thread (new Runnable ()
            {
                public void run ()
                {
                    try {
                        tv.setText("Saved!");
                        Thread.sleep(5000);
                        tv.setText(null);  //tv is a text view
                        Thread.sleep(5000);
                        finish();

                    } catch (InterruptedException e) {
                        alerttmp.setIcon(R.drawable.ic_launcher);
                        alerttmp.setTitle("Error");
                        alerttmp.setMessage("Thread could not be executed Thread id: 100390");
                        alerttmp.show();
                    }

                }
            }).run();
        }
    }); 

ほら、ポジティブボタンが強調表示され、アクティビティが閉じられるまで強調表示されたままになります。ダイアログを非表示にし、pbを表示し、テレビに「保存済み!!」というテキストを表示します。その中にはテキストがなく、結局のところアクティビティを殺します。

SOSみんな!ありがとう!

ps:英語は私の母国語ではないので、シェイクスピアの言葉は使用しないでください。:)言語をできるだけシンプルにしてください!ありがとうございました!

4

2 に答える 2

1

問題は、UI スレッドで UI の処理を​​行わないことです。

実行可能なオブジェクトを UI ハンドラーにポストする必要があり、そのために新しいスレッドを生成するだけではありません。

を使用new Handler().postDelayed(Runnable runnable, long millis)してそれを実現できます。これはもちろん、生成した他のスレッドからではなく、UI スレッドから実行する必要があります。

于 2013-02-01T02:09:21.167 に答える
0

2つのハンドラーを使用してそれを行うことができました。コードは次のとおりです:注:ハンドラーとpostDelayedメソッドについてさらに知る必要があるため、コメントが役立ちます。それはともかく)

    alert.setPositiveButton("Yes", new android.content.DialogInterface.OnClickListener(){
        public void onClick(DialogInterface i, int j)
        {
            pb.setVisibility(0);
            tv.setText("Saved!");
    new Handler().postDelayed(new Runnable() {
                public void run() {
                    tv.setText(null);
        }}, 5000);
    new Handler().postDelayed(new Runnable() {
        public void run() {
            finish();
}}, 5000);
        }});
于 2013-02-01T03:35:53.973 に答える