我正在使用 AndEngine 开发一款游戏,我需要向用户显示他的 Facebook 好友列表。
我已经为 ListView
创建了自定义的 Adatper
,加载完成后一切正常。
我的加载部分本身有问题。
ListView 位于自定义对话框内,因此在该对话框内,我运行一个 AsyncTask
来获取 friend 的信息,在该 AsyncTask
我有一个 ProgressDialog
。问题是,ProgressDialog
显示在包含待列表的对话框后面(加载时,只是标题)。
我可以看到 ProgressDialog
在该对话框后面“偷看”。
有什么想法吗?
这是一些代码:
FriendsDialog.java
private ProgressDialog dialog;
//Constructor of the AsyncTask
public FriendsLoader(Context context) {
dialog = new ProgressDialog(context);
dialog.setMessage("Please wait..\nLoading Friends List.");
}
@Override
protected void onPreExecute() {
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
dialog.setView(inflater.inflate(R.layout.loading, null));
dialog.setMessage("Please wait..\nLoading friends.");
dialog.show();
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, Object>> data) {
if (dialog.isShowing()) {
dialog.dismiss();
}
MyAdapter myAdapter = new MyAdapter(context, data);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(myAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) {
String id = (String) listView.getItemAtPosition(myItemInt);
listener.onUserSelected(id);
dismiss();
}
});
}
最佳答案
从另一个对话框打开一个对话框并不是最好的主意,特别是如果其中一个对话框是进度对话框(尝试旋转屏幕..)。
我建议一个更好的方法:
好友对话框将有 2 个 View :ListView 和 ProgressBar。 当您加载数据时,ListView 将不可见,而 ProgressBar 此时将可见。当您完成加载数据后,只需在这两个 View 之间切换可见性即可。
为了在这些 View 之间实现更平滑的过渡,您可以使用 ViewAnimator ,它负责可见性模式,甚至允许您为过渡添加效果(例如淡入淡出、幻灯片等)。使用起来非常简单,网上有很多示例。
祝你好运!
关于java - Android ProgressDialog 位于另一个对话框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13214340/