Android RemoteViews ListView 滚动

标签 android

我正在尝试将 ListView 滚动到 AppWidget 中的特定位置。

但是它没有做任何事情,我也尝试了 setPosition 方法但没有用。

也没有错误或堆栈跟踪。

代码:

                    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);
                    }

最佳答案

问题:ListView 在显示之前没有任何子项。因此,在设置 adpater 后立即调用 setScrollPosition 没有任何效果。以下是 AbsListView 中的代码哪个检查:

final int childCount = getChildCount();
if (childCount == 0) {
    // Can't scroll without children.
    return;
}

解决方案:理想情况下,我会使用 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 个位置。

Auto scrolling of ListView in app widget

关于Android RemoteViews ListView 滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25618733/

相关文章:

android - Facebook SDK 3.0 安卓

android - 如何创建中心凸起的标签栏?

android - 在 Android 中,联系人同步适配器应该在单独的进程中运行吗?

java - 无法有 Intent 地开始 Activity

android - FrameLayout subview 在调整大小时未正确更新

java - 如何在 Android Studio 中更新 Cordova 版本

android - 设备在Android中连接到WiFi时如何获取蜂窝网络的IP地址

java - 如何在 Android 中使用多个数据库帮助程序类在 SQLite 中进行内部联接

android - 如何将抽屉导航添加到我现有的代码中?

java - Android - 优化多个if语句