簡體   English   中英

在離開當前活動之前調用onPause

[英]onPause gets called before leaving the current activity

我有以下內容:

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之前。 知道為什么嗎?有解決方案嗎?

這是因為Android中的Dialog不會阻塞-意味着在其后面運行的線程(在這種情況下,您的Activity尤其是onItemClickListener )將繼續執行。

您似乎想要顯示一個加載對話框,以使用戶知道他單擊的項目正在加載。 我建議您將該對話框移至下一個活動(該活動從onClick開始),然后從那里顯示並關閉該對話框。

我認為問題可能是您在OnItemClickListener中調用finish() 這將導致當前的活動在您單擊某個項目后立即結束,由於您的onPause()實現,該項目將立即關閉對話框。

也許您需要在創建ViewPlaylist活動ViewPlaylist不是在此活動中顯示對話框。

當前活動之上的任何內容(對話框或任何其他活動)都會使其成為后台活動,因此調用了onPause。 如果有的話,應該在活動的onResume中調用dialog.dismiss()。 在您的實現中,單擊按鈕時會顯示一個對話框,從而暫停您的活動並調用dismiss。 您應該僅在與對話框關聯的過程完成后才調用dismiss,從而告訴您您准備做其他事情-在您的情況下,啟動另一個活動。 在對話框的onDismiss中啟動您的活動。 例如:

AlertDialog alert = new AlertDialog.Builder(this).create();
  alert.setOnDismissListener(new OnDismissListener() {
    @Override
    public void onDismiss(DialogInterface dialog) {
      // start the other activity
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM