0

I'm working on a game using AndEngine, and I need to show the users the list of his Facebook friends. I've created my custom Adatper for the ListView and after the loading finishes everything works great. I have a problem with the loading part it self.

The ListView is inside a custom dialog, So inside this dialog, I'm running an AsyncTask to fetch the friends' info, in that AsyncTask I have a ProgressDialog. The problem is, the ProgressDialog shows up behind the dialog that contains the to-be list (which while loading, is just the title). I can see the ProgressDialog "peeking" behind that dialog.. Any Ideas?

Here's some code:

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();
        }
    });
}
4

2 回答 2

2

Opening a dialog from another dialog is not the best idea, especially if one of them is a progress dialog (try to rotate the screen..).

I suggest a better approach:

The friends dialog will have 2 views: ListView and a ProgressBar. The ListView will be invisible when you load the data, and the ProgressBar will be visible at the time. When you'll finish loading the data, just switch the visibility between those 2 views.

For a smoother transition between those views, you can use ViewAnimator, which takes care of the visibility modes and even allows you to add an effect to the transition (e.g. fade, slide etc.). It's very simple to use and there are lots of examples online.

Best of luck!

于 2012-11-06T01:02:40.927 回答
0

Use Activity as a dialog by setting style(in manifest). and than you can use Progress Dialog inside that activity

于 2012-11-06T06:17:32.840 回答