【问题标题】:How to show a ProgressDialog while changing from a activity to another activity?从一个活动更改为另一个活动时如何显示 ProgressDialog?
【发布时间】:2011-02-02 18:44:00
【问题描述】:

我想在我的活动 A 启动另一个活动 B 时显示一个 PD。但是在那个 onclick 方法中,我的 A 活动必须在启动 B 之前做一些工作,而 B 也必须做一些工作,因为它必须加载一个UI 的大量数据。

我需要一个PD,在从Activity A切换到B的加载数据的所有过程中,用户都可以查看。

¿怎么办?

我尝试在 MyApplication.java 上存储一个静态 ProgressDialog,并使用以下方法:

public static void showProgressDialog(Context c) {
    pd = ProgressDialog.show(c, c.getResources().getString(R.string.app_name), 
        c.getResources().getString(R.string.loading), true, false);    
}
public static void dismissProgressDialog(){
    pd.dismiss();
}

但它不起作用,它什么也不显示,我不知道为什么

如何通过简单的方式实现这一点? 我知道我可以使用异步任务来完成,但这对我来说太难了,我无法理解我在这个网络和谷歌上找到的代码示例

欢迎提供代码示例

谢谢

【问题讨论】:

  • i know that i can do it with async task, but that is too hard for me 很抱歉,只能这样。
  • 你能给我简单的代码示例吗?

标签: android progressdialog


【解决方案1】:

好吧,我同意@Falmarri 的评论,最简单的方法是使用 AsyncTask 实现它。因为 AsyncTask 管理着 UIThread 和一个后台线程。

我总是用 AsyncTask 来做这件事,但我不认为把我的代码粘贴在这里会对你有帮助,因为你的要求可能不像我的,但我认为你可以这样做;

子类化 AsyncTask 并覆盖这些方法;

  • onPreExecute()... 因为这 在 ui 线程中调用方法 您可以创建并显示进度 对话。
  • doInBackground(可运行任务)... 此方法在后台运行 线程所以你不必担心 关于线程处理......所有你 要做的就是努力
    (处理数据、下载数据等)
    并将任何更新发布到 ui 你想要的。

  • onProgressUpdate(对象...值)... 此方法也在 ui 中调用 线程,因此您可以更新您的
    进度对话框
    价值。

  • onPostExecute(对象结果)... 此方法在 ui 线程中运行 所以,你可以显示操作
    结果并关闭进度
    对话框,并调用您的新活动。

你可以在这里做所有的操作,activity A 操作和activity B 操作,AsynTask 会为你管理 Threading 管理:)

编辑 1:

我不知道您的设计有多复杂,但我在这里制作了一个项目示例,也许这不是您想要的,但在我的回答中,它包含了这里描述的所有内容,也许就像一个示例一样有效。

我建议你阅读更多关于这个类的信息,因为它是最重要的一个,在这里你可以阅读更多关于这个机制的信息...... http://android-developers.blogspot.com/2009/05/painless-threading.html

【讨论】:

  • 我不明白。如何知道此类何时完成它在我的活动 A 和活动 B 上执行的代码?我看不出这门课怎么知道。如果它不知道 A 和 B 必须完成的任务何时结束,那么进度对话框将永远显示
  • 你告诉我,我可以在这里完成所有的操作,但这是不可能的,是很多操作,我的应用程序的设计方式是这些操作必须在 A 和 B 上完成.我不能搬到这里。 A 和 B 有数千行代码。将需要数周或飞蛾才能搬到这里,如果我必须将操作搬到这里,我肯定会面临很多难以解决的错误和问题
  • 如果不对此类进行操作,就无法进行进度对话框:S ???
【解决方案2】:

您可以在布局中添加进度条:

<FrameLayout
    android:id="@+id/mapLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        //your layout
    </LinearLayout>

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" >
    </ProgressBar>

</FrameLayout>

在您的活动 onCreate 中加载进度条:

public void onCreate(final Bundle savedInstanceState) {

    mProgress = (ProgressBar) findViewById(R.id.progressBar);
    mProgress.setVisibility(View.VISIBLE);

    //rest your code       
}

当您的活动开始时停止进度条:

@Override
protected void onStart() {

    //your code
    mProgress.setVisibility(View.GONE);        
    super.onStart();
}

【讨论】:

    【解决方案3】:
    1. 为一路加载/进度对话框创建一个单例实例。
    2. 为 ProgressView/对话框使用 ApplicationContext
    3. 从静态功能访问 troughout 应用程序管理

    这可以是 3 种方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      相关资源
      最近更新 更多