Я нашел одно решение, но оно может быть не идеальным!
Я установил повторяющийся сигнал в onEnable () AppWidgetProvider и отменил его в onDisabled ().Этот сигнал тревоги вызывает BroadcastReceiver, который обновляет представления виджетов и использует setRelativeScrollPosition () в RemoteView.
Вот несколько строк кода:
В классе расширяется AppWidgetProvider
public void onEnabled(Context context) {
[...]
// create alarm that will move the widget list content every n seconds
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
long firstTime = SystemClock.elapsedRealtime();
firstTime += 10*1000;
Intent i = new Intent(context, WidgetAutoScroller.class);
PendingIntent widgetAutoScroll = PendingIntent.getBroadcast(context, 0, i, 0);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, firstTime,
10*1000, widgetAutoScroll);
super.onEnabled(context);
}
@Override
public void onDisabled(Context context) {
// deactivate the alarm that moves the widget content
Intent i = new Intent(context, WidgetAutoScroller.class);
PendingIntent widgetAutoScroll = PendingIntent.getBroadcast(context, 0, i, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(widgetAutoScroll);
super.onDisabled(context);
}
WidgetAutoScroller.java
public class WidgetAutoScroller extends BroadcastReceiver {</p>
<pre><code> @Override
public void onReceive(Context context, Intent intent) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, CascadeWidgetProvider.class));
for( int i=0 ; i<appWidgetIds.length ; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews rv = CascadeWidgetProvider.getWidgetView(context, appWidgetId);
rv.setRelativeScrollPosition(R.id.widget_collection, 1);
appWidgetManager.updateAppWidget(appWidgetId, rv);
}
}
}
Если у вас есть лучшее решение моей проблемы, пожалуйста, ответьте.
РЕДАКТИРОВАТЬ : Еще одна проблема: что делать, когда я достигаю конца моегосписок?Я хотел бы перейти к первому элементу списка, но я не знаю, как получить текущую позицию списка из моего RemoteView или appWidgetId ...