两件事:
views.setScrollPosition(R.id.lvWidget, 3)
是正确的调用。在内部,setScrollPosition(int, int)
调用了 RemoteViews#setInt(viewId,"smoothScrollToPosition",position);
。
viewId : your ListView's id
"smoothScrollToPosition" : method name to invoke on the ListView
position : position to scroll to
所以,你正在调用正确的方法。
以下是对方法AppWidgetManager#partiallyUpdateAppWidget(int, RemoteViews)
的注释 - 取自AppWidgetManager.java
的源代码。我相信它可以回答你的问题:...与{RemoteViews#showNext(int)},{RemoteViews#showPrevious(int)},{RemoteViews#setScrollPosition(int, int)}和类似命令一起使用...
public void partiallyUpdateAppWidget(int appWidgetId, RemoteViews views) {
partiallyUpdateAppWidget(new int[] { appWidgetId }, views);
}
正如注释所示,在views.setScrollPosition(R.id.lvWidget, 3)
之后调用partiallyUpdateAppWidget(appWidgetId, views)
。
注释还警告您:如果小部件没有通过{#updateAppWidget(int[], RemoteViews)}接收到完整的更新,则将忽略此方法
。这可能意味着以下调用:
views.setRemoteAdapter(R.id.lvWidget, svcIntent)
views.setScrollPosition(R.id.lvWidget, 3)
不应该在一个更新中完成。我建议您将这些调用分成两个单独的更新:
首先:
views.setRemoteAdapter(R.id.lvWidget, svcIntent);
mAppWidgetManager.updateAppWidget(appWidgetIds, views);
第二点:
views.setScrollPosition(R.id.lvWidget, 3);
mAppWidgetManager.partiallyUpdateAppWidget(appWidgetId, views);
请注意,第一个是完全更新,而第二个仅为部分更新。