2012-12-05 2 views
3

하나 이상의 열/행에 정보를 표시하는 GridView가있는 위젯 (작동)이 있습니다. 프로그래밍 방식으로 열 수를 설정하려는 경우 사용자가 선택해야합니다. Layout-XML 내부의 numColumns를 "1"로 설정하면 잘 동작합니다. RemoteAdapter를 사용하여,위젯 (RemoteViews)의 GridView에서 numColumns 변경이 적용되지 않습니다.

<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() 메소드 :

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

레이아웃은 다음과 같습니다

나는 다음과 같은 방법으로 numColumns를 설정하려고하면 , 그것은 아무런 영향을 미치지 않습니다
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 주석이있는 방법입니다. 당신이 직접 확인할 수 있습니다

@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

이 자신을 대답의 GridView 만 세 등의 방법이 있습니다.

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

또는

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

이 작품 :

내가 지금까지 초기 리모트 뷰 RemoteViews를 변경하는 것입니다 발견 한 유일한 방법은 각 열 금액에 대한 다른 자원을 사용하는 객체 하지만 코드를 작성하거나 실행하는 것이 효율적이라고 상상할 수는 없습니다. 그러나 다시, 그것은 그렇게 작동합니다 ...

관련 문제