设置android小部件的初始滚动位置

时间:2013-10-14 08:28:01

标签: android android-listview android-widget remoteview

我有一个基于集合的小部件,我想更改初始滚动位置。

我试过跟踪我的RemoteViewsFactory ..

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

但遗憾的是它不起作用..我也尝试在我的WidgetProvider中设置正确,但是没有工作。 那么,请问..有没有办法如何更改包含在远程视图中的列表视图的滚动位置?谢谢..

1 个答案:

答案 0 :(得分:3)

我已在RemoteViewsService.RemoteViewsFactory中的onDataSetChanged函数中完成此操作。我不得不添加一个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);
}