Не всегда вызывается прослушиватель виджета ImageButton

#android #android-widget

#Android #android-виджет

Вопрос:

У меня есть простой виджет (Android 2.1), содержащий только LinearLayout, сам содержащий ImageButton. У ImageButton есть прослушиватель по щелчку мыши. Проблема в том, что если я помещу несколько таких же виджетов на свой домашний экран, некоторые из них будут работать (прослушиватель вызывается при нажатии кнопки), а некоторые нет! Я не вижу ни одного шаблона, в котором работают, а которые нет.

Вот макет виджета:

 <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null">

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@ id/ImageButton01"
    android:src="@drawable/widget_running"
    android:background="@null">
</ImageButton>
  

И вот код поставщика виджета:

 public class GPAppWidgetProvider extends AppWidgetProvider {
private String mTag = getClass().getSimpleName();

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    final int N = appWidgetIds.length;
    Log.e(mTag, "onUpdate ");

    // Perform this loop procedure for each App Widget that belongs to this
    // provider
    for (int i = 0; i < N; i  ) {
        Log.e(mTag, "widget onUpdate one loop");
        int appWidgetId = appWidgetIds[i];

        // Create an Intent
        Intent intent = new Intent(context, GPService.class).setAction(ACTION_WIDGET_TOGGLE_PAUSE);
        intent.putExtra("widgetId", appWidgetId);
        PendingIntent pauseIntent = PendingIntent.getService(context, 0, intent, 0);

        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.gp_appwidget);
        views.setOnClickPendingIntent(R.id.ImageButton01, pauseIntent);

        // widget update
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}
  

}

Комментарии:

1. Обновление: кажется, что если я перезапущу телефон или приложение, то все виджеты будут работать… Но если я добавляю новые виджеты, большую часть времени они не будут работать, пока я не перезагружу телефон или приложение…

2. Я также сталкиваюсь с этим, как только я добавляю виджет на рабочий стол, он не сразу прикрепляет слушателей к кнопкам. Я должен запустить службу / запустить приложение через значки home, чтобы запустить обновление.

Ответ №1:

У меня была такая же проблема.

Не забудьте установить другой «requestCode» при вызове «GetService» :

 public static PendingIntent getService (Context context, int requestCode, Intent intent, int flags)
  

И убедитесь, что ваш «appWidgetId» отличается для каждого виджета.