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

Posted

技术标签:

【中文标题】设置 Android 小部件的初始滚动位置【英文标题】:set initial scroll position of an Android widget 【发布时间】:2013-10-21 18:42:42 【问题描述】:

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

我已经尝试在我的 RemoteViewsFactory 中进行跟踪..

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

但不幸的是它不起作用..我也尝试在我的 WidgetProvider 中设置它,但没有起作用。 那么,请问..有没有办法改变包装到远程视图中的列表视图的滚动位置?

【问题讨论】:

我遇到了同样的问题。暂时没有解决 我开始认为,这是不可能的..我尝试从我的RemoteViewsFactoryWidgetProvider 发送一条消息,但问题是我无法保留原始实例包装RemoteViews 实例:/ 我当前的“解决方案”是仅加载以我想要作为初始索引的索引开头的项目.. 你成功捕捉到滚动事件了吗? onClickListener 是小菜一碟,而 onScrollListener 不存在,这让我抓狂:/ 我没有尝试这样做,但我认为不可能直接将事件附加到 RemoteView。您可以设置 onClickPendingIntent,这就是您正确处理点击的方式。或者您设法以某种方式将点击侦听器添加并指向小部件? 需要 onClickPendingIntent。但我找不到任何可用于滚动的类似内容。我的老板,想在检测到滚动时运行应用程序,使用 onClick 可以正常工作,但他坚持使用滚动/滑动启动:-/ 【参考方案1】:

我在 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);

【讨论】:

以上是关于设置 Android 小部件的初始滚动位置的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Marquee 在小部件中不起作用?

是否存在具有 View 回收的 Gallery 小部件的替代品?

如何在小部件中添加垂直滚动条?

优质Android小部件:索尼滚动相册

如何暗示颤振小部件是可滚动的?

SWT 独立滚动条小部件