![](/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.