![](/img/trans.png)
[英]Is it possible that onPause() gets called if onResume() hasn't been called before?
[英]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.