我正在使用AndEngine开发游戏,我需要向用户显示他的Facebook朋友列表。
我已经为Adatper
创建了自定义ListView
,并且在加载完成后,一切正常。
我自己的加载部分有问题。ListView
在自定义对话框中,因此在此对话框中,我正在运行AsyncTask
来获取朋友的信息,因为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个视图:ListView和ProgressBar。
加载数据时,ListView将不可见,并且ProgressBar当时将可见。完成数据加载后,只需在这两个视图之间切换可见性即可。
为了使这些视图之间的过渡更平滑,您可以使用ViewAnimator,它会处理可见性模式,甚至允许您为过渡添加效果(例如淡入淡出,滑动等)。它非常易于使用,并且在线上有很多示例。
祝你好运!