2012-12-05 68 views
3

我有一個窗口小部件(工作)與GridView,其中顯示1列或多列/行信息。 我想以編程方式設置列數,導致用戶應該選擇。如果我將Layout-XML中的numColumns設置爲「1」,則它工作正常。 如果我嘗試設置爲numColumns通過以下方式,它沒有任何效果:在Widget(RemoteViews)GridView中更改numColumn沒有任何作用

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" 
    /> 

我的窗口小部件的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沒有效果,還有其他方法調用。 我做錯了什麼?

+0

如果它解決您的問題,請接受下面的答案。 –

回答

1

您可以針對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

2

我試圖找到答案自己。

我發現做到這一點至今更改初始RemoteViews只有這樣,對象使用不同的資源,每列金額:

RemoteViews rViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout_1_column); 

RemoteViews rViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout_3_columns); 

該作品但我無法想象它是有效的代碼或運行。但再次,它的作品如此...

相關問題