【问题标题】:Android Progress Bar not working for meAndroid 进度条不适合我
【发布时间】:2013-05-01 18:00:12
【问题描述】:

进度条对我不起作用。我试图展示一些正在进行的细节。但我不能,我做错了什么?请帮帮我。

活动文件名 - MainActivity.java

package com.example.sqliteexample;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;

public class MainActivity extends Activity {
private Handler handler = new Handler();
private ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //dialog = ProgressDialog.show(this,getString(R.string.loading) ,getString(R.string.alignMsg));
    dialog = ProgressDialog.show(this,"Loading", "Loading the Image of the Day");
    Thread th = new Thread()
    {
        public void run() {
            handler.post(
                    new Runnable (){
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(10000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            dialog.dismiss();
                        }});
        }};
        th.start();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

【问题讨论】:

  • 不起作用是什么意思?
  • 在显示中,我看不到“正在加载当天的图像”字符串。
  • 另外,删除与Thread th = new Thread() {相关的行,这完全没有意义。你已经通过调用handler.post() 建立了另一个线程。顺便说一句,应用程序是否崩溃或在 LogCat 中发布任何内容?

标签: android progress-bar android-progressbar


【解决方案1】:

使用handler.postDelayed 试试看:

dialog = ProgressDialog.show(this,
         "Loading", "Loading the Image of the Day");
handler.postDelayed(runnable,10000);
}
Runnable runnable = new Runnable() {
   @Override
   public void run() {
      /* dismiss  dialog here*/
      dialog.dismiss();

      handler.removeCallbacks(runnable);
   }
};

或者您需要将 Thread.sleep(10000); 移动到 Thread run 方法中,而不是您传递给 Handler.post 方法的 Runnable 中:

Thread th = new Thread()
    {
        public void run() {
            /** call Thread.Sleep here... **/
            Thread.sleep(10000);
            handler.post(
            ....your code here....

【讨论】:

  • 您的第二个解决方案很有用,现在运行良好。谢谢。
【解决方案2】:

handler 在主活动中定义,因此它将在 UI 线程上运行。您要求睡眠 10 秒,这在 UI 线程上不起作用。

如果您想显示进度条并在 10 秒后将其关闭,请使用 handler.postDelayed(Runnable r, long delayMillis)

这是代码:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // dialog = ProgressDialog.show(this,getString(R.string.loading) ,getString(R.string.alignMsg));
    dialog = ProgressDialog.show(this, "Loading", "Loading the Image of the Day");
    handler.postDelayed(new Runnable()
    {
        @Override
        public void run()
        {
            dialog.dismiss();
        }
    }, 10000);
}

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多