2014-03-04 1 views
0

버튼을 클릭하면 Android 위젯에서 레이아웃을 제거/추가해야합니다 (버튼은 위젯에 있음).추가 - Android 위젯에서 런타임에 뷰를 삭제

여기 내가 OnClickListener를 효과를 가지고있는 PendingIntent 기술을 발견 인터넷에 검색 내 코드

@Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     // There may be multiple widgets active, so update all of them 
     final int N = appWidgetIds.length; 
     for (int i = 0; i < N; i++) { 
      updateAppWidget(context, appWidgetManager, appWidgetIds[i]); 
     } 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 

     if(intent.getAction().equals(ACTION_HIDE_BALANCE)) { 
      // CODE TO CHANGE WIDGET UI 

     } 
    } 

    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { 

     CharSequence widgetText = context.getString(R.string.appwidget_text); 
     // Construct the RemoteViews object 
     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 

     Intent intent; 
     intent = new Intent(ACTION_HIDE_BALANCE); 
     PendingIntent hideBalancePendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     views.setOnClickPendingIntent(R.id.action_wallet_hide_balance, hideBalancePendingIntent); 

     intent = new Intent(ACTION_SHOW_BALANCE); 
     PendingIntent showBalancePendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     views.setOnClickPendingIntent(R.id.action_wallet_show_balance, showBalancePendingIntent); 


     // Instruct the widget manager to update the widget 
     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 
} 

입니다 (이미 내 매니페스트에서 인 텐트 필터를 추가).

문제는 onRecieve() 콜백에 있습니다. 어떻게 위젯 UI를 변경할 수 있습니까? rootView.removeView (layoutView)와 같은 레이아웃을 제거해야합니다.

미리 감사드립니다.

답변

0

좋아, 나는 그것이 표준보기와 거의 비슷하다는 것을 알았다.

@Override 
public void onReceive(Context context, Intent intent) { 
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
    int appWidgetId = 0; 

    if(intent.getAction().equals(ACTION_HIDE_BALANCE)) { 
     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.root_view); 
     views.removeAllViews(R.id.view_to_remove); 
     appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); 
     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 

    super.onReceive(context, intent); 
} 

Obviusly는 온 클릭 PendingIntent

에 추가 AppWidgetManager.EXTRA_APPWIDGET_ID를 연결했다