#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» отличается для каждого виджета.