2013-01-03 27 views
0

我想在用戶點擊時更改安卓部件的可視元素之一。這是在widget的XML安卓更新部件外觀

<ImageView 
     android:id="@+id/bg" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="false" 
     android:layout_marginLeft="20dp" 
     android:layout_marginTop="18dp" 
     android:src="@drawable/seal" /> 

我想根據一個ID的改變src,所以從小工具我打算送遠程視窗點擊listener

Intent bgSwitch = new Intent(widgetContext, MainActivity.class); 
bgSwitch.putExtra("jurisdiction", "bg"); 
PendingIntent bgIntent = PendingIntent.getActivity(widgetContext, 
6, bgSwitch, PendingIntent.FLAG_UPDATE_CURRENT); 
remoteView.setOnClickPendingIntent(R.id.bg, bgIntent); 

和透明性(或小部件本身)我想以某種方式更改imageview的來源。

我不想只翻轉一堆imageviews的可見性。

這將如何實現?

回答

3

你可以試試這個方法:

public class SwitchWidget extends AppWidgetProvider { 
public static String SWITCH_WIDGET_UPDATE = "MainActivity.Switch"; 
public static String WIFI = "wifi"; 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 
    // TODO Auto-generated method stub 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 
    updateSwitch1(context, appWidgetManager, appWidgetIds[0]); 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    super.onReceive(context, intent); 
    Log.d("SWitch Widget", "On Receive"); 



    WifiManager wifiManager = (WifiManager) context 
      .getSystemService(Context.WIFI_SERVICE); 

    RemoteViews remoteViews; 

    AppWidgetManager appWidgetManager = AppWidgetManager 
      .getInstance(context); 

    if (SWITCH_WIDGET_UPDATE.equals(intent.getAction())) { 
     Log.d("SWitch Widget", "Widget Choose"); 
     ComponentName thisAppWidget = new ComponentName(
       context.getPackageName(), getClass().getName()); 

     int ids[] = appWidgetManager.getAppWidgetIds(thisAppWidget); 
     for (int appWidgetID : ids) { 

       updateSwitch1(context, appWidgetManager, appWidgetID); 
      } 

     } 

    } 
    if (intent.getAction().equals(WIFI)) { 

      if(wifiManager.isWifiEnabled()) 
       wifiManager.setWifiEnabled(false); 
      else 
       wifiManager.setWifiEnabled(true); 


     // appWidgetManager.updateAppWidget(1, remoteViews); 
    } 
    else if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { 


      remoteViews = new RemoteViews(context.getPackageName(), 
        R.layout.widget1); 
      wifiManager = (WifiManager) context 
        .getSystemService(Context.WIFI_SERVICE); 
      if (wifiManager.isWifiEnabled()) { 
       remoteViews.setImageViewResource(R.id.button_one, 
         R.drawable.switch_1_wifi_on); 
      } else { 

       remoteViews.setImageViewResource(R.id.button_one, 
         R.drawable.switch_1_wifi_off); 
      } 
      appWidgetManager.updateAppWidget(new ComponentName(context, 
        SwitchWidget.class), remoteViews); 


    } 



private void updateSwitch1(Context context, 
     AppWidgetManager appWidgetManager, int appWidgetId) { 
    // TODO Auto-generated method stub 
    Log.d("SWitch Widget", "Switch1"); 
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), 
      R.layout.widget1); 


    WifiManager wifi = (WifiManager) context 
      .getSystemService(Context.WIFI_SERVICE); 
    if (wifi.isWifiEnabled()) 
     remoteViews.setImageViewResource(R.id.button_one, R.drawable.switch_1_wifi_on); 
    else 
     remoteViews 
       .setImageViewResource(R.id.button_one, R.drawable.switch_1_wifi_off); 

    Intent wifiIntent = new Intent(context, SwitchWidget.class); 
    wifiIntent.putExtra("ID", appWidgetId); 
    wifiIntent.setAction(WIFI); 
    PendingIntent wifiPendingIntent = PendingIntent.getBroadcast(context, 
      0, wifiIntent, 0); 
    remoteViews.setOnClickPendingIntent(R.id.button_one, wifiPendingIntent); 

    appWidgetManager.updateAppWidget(appWidgetId, remoteViews); 
    } 

    } 

而且也不要忘了在你的清單文件爲補充的行動,並添加權限。

 <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
      <action android:name="wifi" /> 
+0

@CQM如果它適合你。您可以將其標記爲答案。和rpl我是否適用於你。 – Rahil2952