2010-11-29 29 views
6

Tôi đang làm việc trên một tiện ích con và nó hoạt động tốt trong API cấp 5 trở lên. Nó không được hỗ trợ ở tất cả trong API cấp 1 hoặc 2. Nó sẽ làm việc hoàn toàn tốt trong 3 và 4 nhưng vì một số lý do widget không cập nhật.Tại sao không cập nhật tiện ích ứng dụng của tôi trong API 3 hoặc 4?

Phương thức onUpdate được gọi và thực hiện mà không có lỗi; tuy nhiên, trong 3 và 4 nó không thay đổi văn bản của widget. Tôi khá mất mát. Có suy nghĩ gì không?

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 

    DataAccess helper = new DataAccess(context); 
    String text = helper.getCurrentText(); 
    helper.close(); 

    if (text != null) 
     views.setTextViewText(R.id.widget_text, text); 

    Intent intent = new Intent(context, WidgetDetailsActivity.class); 
    PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0); 
    views.setOnClickPendingIntent(R.id.widget, pending); 

    appWidgetManager.updateAppWidget(appWidgetIds, views); 
} 
+0

Bạn đã sửa lỗi tiện ích con chưa? Bạn có nhận được văn bản như mong đợi không? Mục đích đang chờ xử lý có hoạt động không? Là onUpdate thực hiện ở tất cả? – Kaj

+0

Vâng, tôi đính kèm trình gỡ lỗi và mọi thứ đã hoạt động ngoại trừ văn bản thay đổi. Tôi có thể thay đổi màu sắc, kích cỡ, hành vi và tất cả những điều đó nhưng tôi không thể thay đổi văn bản. Tôi đã không thử nó trong 1,5 hoặc 1,6 trong một thời gian thực sự dài vì phiên bản đó ngày càng trở nên lỗi thời. –

+0

Lạ. Tôi có các tiện ích hoạt động với 1,5+ và không gặp bất kỳ sự cố nào khi cập nhật văn bản. – Kaj

Trả lời

0

Hãy thử điều này:

Vào cuối của phương pháp cập nhật của bạn, bạn cần phải gọi siêu.

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 

    DataAccess helper = new DataAccess(context); 
    String text = helper.getCurrentText(); 
    helper.close(); 

    if (text != null) 
     views.setTextViewText(R.id.widget_text, text); 

    Intent intent = new Intent(context, WidgetDetailsActivity.class); 
    PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0); 
    views.setOnClickPendingIntent(R.id.widget, pending); 

    appWidgetManager.updateAppWidget(appWidgetIds, views); 

    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 
+0

Tôi đã thử điều này. Vẫn không có may mắn. Nó không xuất hiện để thực hiện các quan điểm từ xa ở tất cả. –

0

Bạn cần bắt đầu dịch vụ trên phương pháp cập nhật và đặt tất cả các mã của bạn trong dịch vụ cũng vậy, ở đây tôi cung cấp cho onReceive và dịch vụ bản demo context.startService(new Intent(context, UpdateService.class));

public static class UpdateService extends Service { 
    @Override 
    public void onStart(Intent intent, int startId) { 
     // Build the widget update for today 
     RemoteViews updateViews = buildUpdate(this); 
     // Push update for this widget to the home screen 
     ComponentName thisWidget = new ComponentName(this, 
       Widget.class); 
     AppWidgetManager manager = AppWidgetManager.getInstance(this); 
     manager.updateAppWidget(thisWidget, updateViews); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    final RemoteViews remoteViews = buildUpdate(context); 
    ComponentName cn = new ComponentName(context, Widget.class); 
    AppWidgetManager.getInstance(context).updateAppWidget(cn, remoteViews); 
    super.onReceive(context, intent); 
} 

nơi buildUpdate là phương pháp cho việc cập nhật widget của bạn mã

Các vấn đề liên quan