1

我在 AppWidget 中有一个列表视图。当用户将列表视图添加到主屏幕或刷新小部件后,我希望列表视图从特定位置开始。我尝试使用 setScrollPostion,但它不起作用。

例如:

RemoteViews 视图 = new RemoteViews(context.getPackageName(), R.layout.my_widget);

……

views.setScrollPosition(R.id.listview_in_widget, 1000); appWidgetManager.updateAppWidget(appWidgetId, 视图);

小部件仍显示第一项。

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

4

3 回答 3

1

所以你应该像这样调用 setScrollPosition 方法:

views.post(new Runnable() {

    @Override
    public void run() {
        views.setScrollPosition(R.id.listview_in_widget, 1000);     
    }
});

或在views.postDelayed方法中。

于 2013-07-08T14:47:42.070 回答
0

是的,这对于 Widget ListView 是可能的。我花了几个星期的间歇性尝试和测试,但这是我学到的。

1) 小部件使用RemoteViews,因此只能使用普通视图的一部分功能(在这种情况下为 ListView)。转到ListView 源并搜索@android.view.RemotableViewMethod。这些注释决定了一个小部件最终可以使用什么。

2) 检查RemoteViews 源并注意第 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);
于 2014-09-01T16:32:49.233 回答
0

请看这个问题。这里解释了如何做,让它工作:Android RemoteViews ListView Scroll

于 2017-02-18T09:07:39.107 回答