【问题标题】:Android ProgressDialog inside another dialog另一个对话框中的 Android ProgressDialog
【发布时间】:2012-11-03 22:57:48
【问题描述】:

我正在使用 AndEngine 开发一款游戏,我需要向用户显示他的 Facebook 好友列表。 我为ListView 创建了我的自定义Adatper,加载完成后一切正常。 我自己的加载部分有问题。

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

【问题讨论】:

  • 很抱歉,当我阅读“Android ProgressDialog inside another dialog”之类的问题时,我的大脑开始沸腾。我认为你正在产生邪恶的东西。我的建议:尝试正确地思考,并按照必须做的方式做事。
  • 起初我想单独使用 AndEngine 来执行此操作,但找不到方法..所以我要这样做。真的没那么复杂。带有列表的对话框,在加载数据时应该有加载指示器..
  • 为什么不使用 ProgressBar 或类似的东西作为 Dialog 的内容?然后在加载完成后,只需更改其内容并将其替换为您的 ListView。

标签: java android dialog progressdialog


【解决方案1】:

从另一个对话框打开一个对话框并不是最好的主意,尤其是如果其中一个是进度对话框(尝试旋转屏幕..)。

我建议一个更好的方法:

好友对话框将有 2 个视图:ListView 和 ProgressBar。 加载数据时 ListView 将不可见,此时 ProgressBar 将可见。完成数据加载后,只需在这 2 个视图之间切换可见性即可。

要在这些视图之间实现更平滑的过渡,您可以使用ViewAnimator,它负责处理可见性模式,甚至允许您为过渡添加效果(例如淡入淡出、滑动等)。使用非常简单,网上有很多例子。

祝你好运!

【讨论】:

  • 很好的答案。它的效果比我预期的还要好!谢谢。在允许的情况下给予赏金(从现在起 13 小时后)
【解决方案2】:

通过设置样式(在清单中)将 Activity 用作对话框。而且您可以在该活动中使用进度对话框

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多