2013-10-14 4 views
3

У меня есть виджет на основе коллекции, и я бы хотел изменить начальную позицию прокрутки.установить начальное положение прокрутки виджета android

Я попытался следующий в моем RemoteViewsFactory ..

 views.setScrollPosition(R.id.widgetList, myDesiredPosition); 
     AppWidgetManager.getInstance(mContext).partiallyUpdateAppWidget(mAppWidgetId, views); 

, но, к сожалению, не work..I также попытался установить это право в моем WidgetProvider, не работает, хотя. Итак, пожалуйста .. есть способ изменить положение прокрутки списка, обернутого в remoteviews? Спасибо.

+0

У меня такая же проблема. пока не решил – bofredo

+0

. Я начинаю думать, что это невозможно. Я попытался отправить сообщение обратно в «WidgetProvider» из моего «RemoteViewsFactory», но проблема в том, что я просто не могу сохранить исходный экземпляр пакета «RemoteViews» 'instance:/ Мое текущее« решение »- загрузить только элемент, начинающийся с индекса, который я хочу иметь в качестве начального. – simekadam

+0

вам удалось поймать событие прокрутки? это сводит меня с ума, что onClickListener - это кусок пирога, а onScrollListener не существует:/ – bofredo

ответ

3

Я сделал это в функции onDataSetChanged в моем RemoteViewsService.RemoteViewsFactory. Мне пришлось добавить AsynTask, чтобы отложить прокрутку. Это может быть необязательно, если ваши представления, возвращаемые getLoadingView, имеют ту же высоту, что и все представления, возвращаемые getViewAt.

@Override 
public void onDataSetChanged() { 
    new AsyncTask<Integer, Void, Void>() { 
     @Override 
     protected Void doInBackground(Integer[] params) { 
      int widgetId = params[0]; 
      int count = params[1]; 

      try { 
       Thread.sleep(800); 
      } catch (InterruptedException e) { 
       Log.d(TAG, "Scroll thread was interrupted"); 
      } 
      String packageName = context.getPackageName(); 
      RemoteViews rv = new RemoteViews(packageName, R.layout.widget_layout); 
      rv.setInt(R.id.list_view, "smoothScrollToPosition", count); 
      AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
      appWidgetManager.partiallyUpdateAppWidget(widgetId, rv); 
      return null; 
     } 
    }.execute(this.appWidgetId, this.rowCount); 
} 
Смежные вопросы