我有以下内容:
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
之前立即调用{{1}}。
知道为什么吗?ANy解决方案?谢谢
答案 0 :(得分:1)
这是因为Android中的Dialog
没有阻止 - 意味着在其后面运行的线程(在这种情况下是您的Activity
,特别是您的onItemClickListener
)将继续执行
看起来您想显示加载对话框,让用户知道他点击的项目正在加载。我建议你将该对话框移动到下一个活动(从onClick开始),然后从那里显示和关闭对话框。
答案 1 :(得分:0)
我认为问题可能是您在finish()
中呼叫OnItemClickListener
。这会导致当前的Activity在您单击某个项目时立即结束,因为您的onPause()
实现会立即关闭对话框。
也许您需要在创建ViewPlaylist
活动而不是此活动时显示对话框。
答案 2 :(得分:0)
当前活动(对话框或任何其他活动)之上的任何内容都会使其成为后台活动,因此会调用onPause。如果有的话,应该在activity'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
}
});