我正在尝试滚动ListView
到某个特定位置AppWidget
.
然而它没有做任何事情,我也尝试过设置位置方法但不起作用。
也没有错误或堆栈跟踪。
Code:
if (list.size() == 0) {
loadLayout(R.layout.rooster_widget_header);
views.addView(R.id.header_container,
views);
} else {
views.setRemoteAdapter(R.id.lvWidget, svcIntent);
views.setScrollPosition(R.id.lvWidget, 3);
}
Issue: ListView
在显示之前没有任何子项。因此调用setScrollPosition
设置adpater后没有效果。以下是代码中绝对列表视图这会检查:
final int childCount = getChildCount();
if (childCount == 0) {
// Can't scroll without children.
return;
}
Solution: 理想情况下我会使用ViewTreeObserver.OnGlobalLayoutListener
用于设置ListView
滚动位置,但在远程视图的情况下这是不可能的。设置滚动位置并调用partiallyUpdateAppWidget
在可运行的情况下有一些延迟。我修改了Android天气小部件代码并分享在git hub.
public class MyWidgetProvider extends AppWidgetProvider {
private static HandlerThread sWorkerThread;
private static Handler sWorkerQueue;
public MyWidgetProvider() {
// Start the worker thread
sWorkerThread = new HandlerThread("MyWidgetProvider-worker");
sWorkerThread.start();
sWorkerQueue = new Handler(sWorkerThread.getLooper());
}
public void onUpdate(Context context, final AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int i = 0; i < appWidgetIds.length; ++i) {
...
final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setRemoteAdapter(R.id.lvWidget, svcIntent);
sWorkerQueue.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
views.setScrollPosition(R.id.list, 3);
appWidgetManager.partiallyUpdateAppWidget(appWidgetIds[i], views);
}
}, 1000);
appWidgetManager.updateAppWidget(appWidgetIds[i], views);
...
}
}
}
这是屏幕记录。它滚动到第 5 个位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)