Android 小部件未填充

Android widget not populating

我创建了一个 android 应用程序,我正在尝试添加一个基本小部件。在我的身体 phone 上,小部件从未填充并且在 我正在使用启动器的虚拟设备每当 小部件将是可见的(当我的主应用程序可见时这很好 - 这也可能是因为 MyWidgetProvider OnUpdate 仅在主应用程序的 onPause() 上触发 - 而不是在任何时间间隔上。

我正在尝试关注 this 使用远程填充 ListView 小部件 观看次数。

我用 TextView 代替了 ListView,但我想要额外的格式和内置的 ListView 小部件的垂直滚动。

调试时我看不出有什么问题,但显然有问题 在某个地方,我只能想象它在 onUpdate 中出错了 方法。

任何人都可以看到哪里出了问题或有想法关注哪里吗 调试?任何线索表示赞赏!


MyWidgetProvider.java

public class MyWidgetProvider extends AppWidgetProvider {
    @Override
    public void onUpdate (Context context,
                          AppWidgetManager appWidgetManager,
                          int[] appWidgetIds) {
        // Attach the remote adaptor to each of the widgets
        for (int appWidgetId : appWidgetIds) {
            Log.d("LOG", "Updating widget " + appWidgetId);
            // Create the intent which references the list widget
            // service.
            Intent intent = new Intent(context, MyListWidgetService.class);
            RemoteViews rv = new RemoteViews(context.getPackageName(),
                                             R.layout.appwidget);
            rv.setRemoteAdapter(R.id.widgetListView, intent);

            appWidgetManager.updateAppWidget(appWidgetId, rv);
        }
    }
}

MyListWidgetService.java

public class MyListWidgetService extends RemoteViewsService {
    @Override
    public RemoteViewsFactory onGetViewFactory(Intent intent) {
        return new MyRemoteViewsFactory(this.getApplicationContext());
    }
}

class MyRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
    public MyRemoteViewsFactory(Context context) {
        mContext = context;
    }

    public void onCreate() {
    }

    public void onDestroy() {
    }

    public int getCount() {
        return 4;
    }

    public RemoteViews getViewAt(int position) {
        RemoteViews rv;
        int val;
        rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_list_item_view);
        // Dummy values
        rv.setTextViewText(R.id.widgetItemA, "Dummy Text 1");
        rv.setTextViewText(R.id.widgetItemB, "Dummy Text 2");
        val = (position % 3);
        if (val != 0) {
            rv.setTextViewText(R.id.widgetItemC, "(" + val + ")");
        }

        return rv;
    }

    public RemoteViews getLoadingView() {
        return null;
    }

    public int getViewTypeCount() {
        return 1;
    }

    public long getItemId(int position) {
        return position;
    }

    public boolean hasStableIds() {
        return true;
    }

    public void onDataSetChanged() {
    }
}

appwidget.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+id/widgetListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/rounded_rect"
        android:fadeScrollbars="true" />

</LinearLayout>

widget_list_item_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/widgetItemA"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/padding"
        android:layout_marginTop="@dimen/padding" />

    <TextView
        android:id="@+id/widgetItemB"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/padding" />

    <TextView
        android:id="@+id/widgetItemC"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/padding"
        android:layout_marginEnd="@dimen/padding" />
</LinearLayout>

问题是我在 AndroidManifest.xml 文件中遗漏了服务 属性。我需要添加

<service android:name=".MyListWidgetService"                                    
         android:permission="android.permission.BIND_REMOTEVIEWS" />