其他分享
首页 > 其他分享> > android – 在Widget(RemoteViews)中的GridView中更改numColumns无效

android – 在Widget(RemoteViews)中的GridView中更改numColumns无效

作者:互联网

我有一个带有GridView的小部件(可以工作),它以1个或多个列/行显示信息.
我想以编程方式设置列数,导致用户选择.如果我将Layout-XML中的numColumns设置为“1”,它可以正常工作.
如果我尝试以下列方式设置numColumns,它没有任何效果:

    rViews.setInt(R.id.duration_view, "setNumColumns", 1);

布局看起来像这样:

    <GridView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/duration_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:minHeight="64dp"
        android:verticalSpacing="0dp"
        android:columnWidth="192dp"
        android:numColumns="auto_fit"
    />

我的widget onUpdate()方法,使用RemoteAdapter:

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        // ....
        Intent intent = new Intent(context, ViewFlipperWidgetService.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
        RemoteViews rViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        rViews.setRemoteAdapter(R.id.duration_view, intent);
        rViews.setEmptyView(R.id.duration_view, R.id.empty_view);

        // This doesnt have any effect...:-(
        rViews.setInt(R.id.duration_view, "setNumColumns", 1); 

        appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.duration_view);            

        AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, rViews);

        // ....
        super.onUpdate(context, appWidgetManager, appWidgetIds);

不仅setNumColumns没有效果,其他方法调用也是如此.
我做错了什么?

解决方法:

您可以针对RemoteViews视图调用的唯一方法是具有@ android.view.RemotableViewMethod注释的方法. GridView只有三种这样的方法:

@android.view.RemotableViewMethod
public void setRemoteViewsAdapter(Intent intent) {

@android.view.RemotableViewMethod
public void smoothScrollToPosition(int position) {

@android.view.RemotableViewMethod
public void smoothScrollByOffset(int offset) {

您可以自己验证:

https://android.googlesource.com/platform/frameworks/base/+/jb-release/core/java/android/widget/GridView.java

标签:android,collections,widget,gridview,remoteview
来源: https://codeday.me/bug/20190517/1123695.html