2010-04-22 53 views
18

我想在通知欄中放置一個進度欄。這個想法顯示了程序將文件上傳到服務器時的進度條。其他一切都可以,但我無法弄清楚如何刷新通知中的進度條。有人知道任何模式可以玩嗎?我的意思是,我應該在哪裏刷新進度條,在服務或活動等等。刷新通知欄中的進度欄​​

+0

我不知道這是否可能。你有沒有用GIF動畫試過? – Macarse 2010-04-22 12:41:05

+0

還沒有,但我需要實時顯示上傳進度,所以我需要更新進度條。我認爲如果你只顯示「加載」消息,那麼使用動畫gif是有效的。無論如何感謝您的時間。 – ahmontero 2010-04-22 13:42:32

+0

我確定它可能。市場應用程序在通知欄中下載和安裝應用程序時顯示進度條... – seanmonstar 2010-04-27 20:59:48

回答

15

我不知道你的代碼是什麼樣子,所以我不知道你需要修改的,布提做了一些通過文件搜索。我在NotificationsProgressBarsRemoteViews上發現了一些東西。

具體來說,在RemoveView中,您可以更新進度欄。因此,結合一些示例代碼中的每一個環節,我得到的是這樣的:

public class MyActivity extends Activity { 
    private static final int PROGRESS = 0x1; 
    private static final int MAX_PROGRESS = 100; 

    private int mProgressStatus = 0; 

    private Handler mHandler = new Handler(); 

    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     //define Notification 
     //... 

     RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification_layout); 
     contentView.setProgressBar(R.id.progress_bar, MAX_PROGRESS, mProgressStatus, false); 
     notification.contentView = contentView; 

     // Start file upload in a background thread 
     new Thread(new Runnable() { 
      public void run() { 
       while (mProgressStatus < MAX_PROGRESS) { 
        mProgressStatus = doWork(); 

        // Update the progress bar 
        mHandler.post(new Runnable() { 
         public void run() { 
          contentView.setProgressBar(R.id.progress_bar, MAX_PROGRESS, mProgressStatus, false); 
         } 
        }); 
       } 
      } 
     }).start(); 
    } 
} 
+2

您是否必須在自定義xml佈局中定義進度條?或者將RemoteViews.setProgressBar()處理。我問的原因是因爲http://developer.android.com/reference/android/widget/RemoteViews.html#setProgressBar(int,int,boolean)他們說給「的文本應該改變的視圖的ID 「。 – Pzanno 2011-02-16 02:07:46

+0

@Pzanno - 我想知道完全一樣的東西(因此+1)。我發現你必須在自定義xml佈局中定義你自己的進度條。 – ArtOfWarfare 2012-12-07 16:54:19

+0

很好的例子...我也在我的客戶視圖中使用progressbar,但是...它掛起我的系統我不知道爲什麼...一切順利,默認通知進度條 – 2016-08-05 09:34:40

0

要刪除進度從遠程視窗使用下面的代碼: -

remoteViews.setViewVisibility(R.id.progressBar, View.INVISIBLE); 

您還可以使用View.GONE但將使android填充空白空間。