2

私は次のものを持っています:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
               ....
               populate();
                handler = new Handler();
        t = new Timer();
        t.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    public void run() {
                        doReload1();
                        populate();
                    }
                });

            }

        }, 300, 30000);
}

private void populate() {
    if (playlists.length != 0) {
        MyListView = (ListView) findViewById(R.id.MyListView);
        for (String item : playlists) {
            Log.d("DEBUG", "item=" + item);
        }

        String[] adapterPlaylists = new String[playlists.length];
        for (int i = 0; i < playlists.length; i++) {
            adapterPlaylists[i] = playlists[i];
        }
        adapter1 = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, adapterPlaylists);

        MyListView.setAdapter(adapter1);
        adapter1.notifyDataSetChanged();

        MyListView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View v,
                    int position, long id) {
                dialogwait = ProgressDialog.show(Playlist.this,
                        "Loading...", "Please wait..", true);
                Intent i = new Intent(getBaseContext(), ViewPlaylist.class);
                i.putExtra("id", idPlaylist[position]);
                i.putExtra("timer", timerPlaylist[position]);
                startActivity(i);

                finish();
            }
        });
    } else
        System.out.println("playlist null");

}

@Override
protected void onPause() {
    super.onPause();
    System.out.println("onPause Playlist!!!!!!");
    dialogwait.dismiss();
    t.cancel();
}

ここでのことです:

dialogwait = ProgressDialog.show(Playlist.this,
                            "Loading...", "Please wait..", true);

を作成し、ProgressDialogでそれを破棄しonPause()ます。しかし、私でさえ作成される直前にonPause呼び出されます。理由は何ですか?解決策はありますか?ありがとうございますonCreate()ProgressDialog

4

3 に答える 3

1

これはDialog、Android では がブロックされないためです。つまり、その背後で実行されているスレッド (この場合はあなたActivity、特にあなたのonItemClickListener) は引き続き実行されます。

ユーザーがクリックした項目が読み込まれていることをユーザーに知らせるために、読み込みダイアログを表示したいようです。そのダイアログを次のアクティビティ (onClick から開始されたもの) に移動し、そこからダイアログを表示して閉じることをお勧めします。

于 2011-11-09T09:04:05.120 に答える
0

現在のアクティビティ (ダイアログまたはその他のアクティビティ) の上にあるものは、バックグラウンド アクティビティになるため、onPause が呼び出されます。どちらかといえば、アクティビティの onResume で dialog.dismiss() を呼び出す必要があります。あなたの実装では、ボタンがクリックされたときにダイアログを表示しているため、アクティビティを一時停止して却下を呼び出しています。ダイアログに関連付けられたプロセスが終了したときにのみ、却下を呼び出す必要があります。これにより、何か他のことを行う準備ができていることをユーザーに伝えることができます。あなたの場合は、別のアクティビティを起動します。ダイアログの onDismiss 内でアクティビティを起動します。例えば:

AlertDialog alert = new AlertDialog.Builder(this).create();
  alert.setOnDismissListener(new OnDismissListener() {
    @Override
    public void onDismiss(DialogInterface dialog) {
      // start the other activity
    }
});
于 2011-11-09T10:25:55.380 に答える
0

問題はfinish()、あなたがOnItemClickListener. これにより、アイテムをクリックするとすぐに現在のアクティビティが終了します。onPause()実装により、ダイアログがすぐに閉じます。

ViewPlaylistこのアクティビティではなく、アクティビティが作成されたときにダイアログを表示する必要があるかもしれません。

于 2011-11-09T09:07:55.053 に答える