我正在使用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,它会处理可见性模式,甚至允许您为过渡添加效果(例如淡入淡出,滑动等)。它非常易于使用,并且在线上有很多示例。

祝你好运!

10-07 19:19
查看更多