2010-09-29 3 views
6

Tôi đang viết một widget với một hoạt động cấu hình trong đó kêu gọi các phương pháp sau đây khi nút OK của nó được nhấp:Làm cách nào để buộc cập nhật trong hoạt động cấu hình?

private void ok() 
{ 
    // ...Do Widget Configuration... 

    // Force an update 
    Context context = getApplicationContext(); 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 
    AppWidgetManager.getInstance(context).updateAppWidget(widget_id, views); 

    // Return the expected result 
    Intent result = new Intent(); 
    result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widget_id); 
    setResult(RESULT_OK, result); 

    finish(); 
} 

này là gần như nguyên văn từ the documentation. widget_id giữ ID tiện ích đã được đào lên trong hoạt động onCreate() của hoạt động.

Khi tôi đặt một thể hiện của các widget trên màn hình chủ, tôi đã xác minh rằng tôi nhận được chuỗi dự kiến ​​các sự kiện:

  • onReceive() được một ACTION_APPWIDGET_ENABLED nếu đó là người đầu tiên.
  • onUpdate() được gọi (trong đó tôi phát hiện thấy tiện ích không được định cấu hình và vẽ thứ gì đó làm tác vụ mặc định).
  • Hoạt động cấu hình xuất hiện.
  • Khi tôi nhấn OK, phương thức ok() ở trên được gọi.

Method lấy tất cả các cách thức thông qua vào finish() và hoạt động cấu hình sẽ biến mất, nhưng không có cuộc gọi đến hoặc onUpdate()onReceive() sau thời điểm này. (Tiện ích chính nó không có updatePeriodMillis.) Tôi kết thúc với một widget trên màn hình có kết quả của hành động mặc định của tôi nhưng không bao giờ được cập nhật.

Nếu tôi đặt tiện ích lên mà không có hoạt động cấu hình, nó sẽ được cập nhật khi được tạo và mọi thứ hoạt động như mong đợi (chỉ không có các bit được định cấu hình).

Tôi có thiếu thứ gì đó theo cách tôi cập nhật không?

Cảm ơn!

+0

Wow, không ai ...? – Blrfl

+0

đây là lỗi đã biết trong android: onUpdate chỉ nên được gọi khi bạn đã trở về từ hoạt động cấu hình của mình. Tôi có chung vấn đề đó. Hy vọng rằng 3.2 sẽ giải quyết nó – soBinary

Trả lời

8

Điều này hóa ra công việc:

new MyWidgetProviderClass() 
    .onUpdate(this, 
      AppWidgetManager.getInstance(this), 
      new int[] { widget_id } 
    ); 
+0

Như khủng khiếp như thế này, đó là những gì tôi cũng đã kết thúc làm. Tôi giữ một tham chiếu tĩnh để AppWidgetProvider của tôi xung quanh mà tôi gọi onUpdate(). Thật buồn vì đó là cách duy nhất. –

+0

Tôi cũng phải đối mặt với vấn đề này. Nhưng làm cách nào chúng ta có thể chuyển các giá trị cấu hình cho phương thức 'AppWidgetProvider onUpdate'? – MobiDev

+0

@ 256: bạn có thể lưu thông tin trong DB thứ hai hoặc sử dụng SharedPreferences bằng cách sử dụng widgetId để giữ cho các thông tin khác biệt –