我在AppWidget中有一个列表视图。当用户将listview添加到主屏幕或刷新小部件后,我想让listview从特定位置开始。我尝试使用setScrollPostion,但它不起作用。
e.g:
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.my_widget);
...
views.setScrollPosition(R.id.listview_in_widget,1000); appWidgetManager.updateAppWidget(appWidgetId,views);
小部件仍然显示第一个项目。
如果有人能给我一些提示怎么做,我将不胜感激?
答案 0 :(得分:1)
所以你应该像这样调用setScrollPosition方法:
views.post(new Runnable() {
@Override
public void run() {
views.setScrollPosition(R.id.listview_in_widget, 1000);
}
});
或views.postDelayed
方法。
答案 1 :(得分:0)
是的,这对于Widget ListView是可行的。我花了几个星期的间歇性尝试和测试,但这是我所学到的。
1)小部件使用 RemoteViews ,因此只能使用普通视图的功能子集(在本例中为ListView)。转到ListView source并搜索 @ android.view.RemotableViewMethod 。这些注释决定了小部件最终可以使用的内容。
2)检查RemoteViews source并在第776行注意 isAnnotationPresent 检查。当您进行未使用 RemotableViewMethod 注释的方法调用时,您经常会看到LogCat中记录的错误会触及此行。
3)您需要确保在调用RemoteViews实例的方法后进行 updateAppWidget 调用。这是一个例子:
//update list item pos
RemoteViews remoteViews = new RemoteViews(_context.getPackageName(), R.layout.widget);
remoteViews.setScrollPosition(R.id.widget_nodes_list, newPos);
//apply pos
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(_context);
appWidgetManager.updateAppWidget(_appWidgetId, remoteViews);
答案 2 :(得分:0)
请看这个问题。以下是解释如何使其工作:Android RemoteViews ListView Scroll