0

ProgressDialogの表示に問題があります。ウェブサイトから情報を取得する方法があります。アプリが動作しているときに1、2秒間ハングしているように見えるのではなく、ある種の「読み込み中」ウィンドウをユーザーに表示したいと思います。

ProgressDialog&Threadを実装しない場合はすべて正常に機能しますが、スレッドを実装して手間のかかる作業を実行しようとすると、AboutMeビューウィンドウが空になります。

OnClickListenerを登録するTextViewを持つMainActivityがあります。

TextViewをクリックすると、次のことが行われます。

    startActivity(new Intent(getBaseContext(), AboutMe.class));

これは、AboutMe.classアクティビティのほとんどです。

public class AboutMe extends Activity {
private ProgressDialog aboutMeProgressDialog;
private String htmlAboutMe = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    getAboutMe(); // Get information from Internet

    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFeatureDrawableResource(Window.FEATURE_NO_TITLE, android.R.drawable.ic_dialog_alert);
    setContentView(R.layout.abutme);

    TextView tvAbout = (TextView) findViewById(R.id.aboutMe);
    tvAbout.setText(Html.fromHtml(htmlAboutMe));

}

private void getAboutMe() {
    try {
        aboutMeProgressDialog = ProgressDialog.show(AboutMe.this, "", "Loading");
        new Thread() {
            @Override
            public void run() {
                try {
                                /** Code to scape webpage **/
                }
                catch (Exception exp) {
                    exp.printStackTrace();
                }
                handler.sendEmptyMessage(0);
            }
        }.start();
    }
    catch (Exception ex) {
        ex.printStackTrace();
    }
}

private final Handler handler = new Handler() {
    @Override
    public void handleMessage(final Message msg) {
        aboutMeProgressDialog.dismiss();
    }
};   

私は明らかに些細なことを見逃していますが、私は考えられるすべてのことをグーグルで試しましたが、それでもProgressDialogと一緒にスレッドを機能させることはできません。

4

2 に答える 2

0

super.onCreate(savedInstanceState);を呼び出した後、getAboutMe()メソッドを呼び出してください。

于 2011-12-12T09:53:12.727 に答える
0

handler.sendEmptyMessage(0);の代わりにUIスレッドメソッドで実行を使用してください。このコードを使用して、ハンドルメッセージを削除します

               runOnUiThread(new Runnable() {
                @Override
                public void run() {
                     aboutMeProgressDialog.dismiss();
                }
            });

男はこれが成功したかどうか私に知らせてください、それはほとんどの場合機能します

于 2011-12-12T10:44:05.837 に答える