如何在Android AppWidget中设置列表视图的初始滚动位置?

时间:2013-07-08 14:26:59

标签: android listview position android-appwidget

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

小部件仍然显示第一个项目。

如果有人能给我一些提示怎么做,我将不胜感激?

3 个答案:

答案 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

相关问题