2015-03-31 85 views
0

我正在學習如何創建小部件,但我堅持了這一點。我有一個包含一個按鈕的小部件,點擊後會啓動一個活動。但有兩個活動可能啓動,這取決於布爾值。如果當前Activity是MainActivity,則布爾值爲true,否則爲false。但是當點擊按鈕時,看起來布爾值在這裏不會更新爲新值。難道我做錯了什麼。任何幫助將被賞識。如何在執行小部件動作之前檢查值是否已更改

public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) 
    { 

     final int N = appWidgetIds.length; 

     for (int i = 0; i < N; i++) 
     { 
      final int appWidgetId = appWidgetIds[i]; 
      RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.rz_widget_layout); 

      Intent intent=null; 


      if(MainActivity.WidgetAppLuancherChecker){intent= new Intent(context, MainActivity.class);} 
      else{intent= new Intent(context, ActivityB.class);} 

      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
      views.setOnClickPendingIntent(R.id.LaunchApp, pendingIntent); 

      appWidgetManager.updateAppWidget(appWidgetId, views); 
     } 
    } 

清單

<receiver android:name="com.AppWidget.ApWidgetProvider" > 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      </intent-filter> 
      <meta-data 
       android:name="android.appwidget.provider" 
       android:resource="@xml/info_widget_layout" /> 
     </receiver> 
+0

上面的代碼應該工作,什麼是iisue呢? – IshRoid 2015-03-31 06:54:19

+0

布爾值保留其默認值,不更新:/ – 2015-03-31 06:55:05

+0

更新布爾值時,我應該調用某個函數嗎? – 2015-03-31 06:55:26

回答

0
public static boolean getLock(Context context) { 
      SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
      boolean lock = prefs.getBoolean("lock", true); 
      return lock; 
     } 

public static void setLock(Context context, boolean isMainActivity) { 

      SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 

      SharedPreferences.Editor editor = prefs.edit(); 
      editor.putBoolean("lock", isMainActivity); 
      editor.commit(); 
     } 

使用SharedPreference。您可以嘗試在MainActivity中實現這兩種方法。將Lock方法設置爲true或false以更改布爾變量。然後下一個點擊你的小工具打開你的第二課。

if(MainActivity.getLock(context)){intent= new Intent(context, MainActivity.class);} 
      else{intent= new Intent(context, ActivityB.class);} 

編輯:設置在SharedPreferences布爾變量後,您可以更新插件..

private void updateWidgetScreen(String updateData) { 

     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); 
     RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget); 
     ComponentName thisWidget = new ComponentName(this, WidgetProvider.class); 
     remoteViews.setTextViewText(R.id.currency, " Dollar"); 

     Intent intent = new Intent(this, WidgetService.class); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, MainUtils.getWidgetID(prefs)); 
     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
     remoteViews.setRemoteAdapter(MainUtils.getWidgetID(prefs), R.id.list_view, intent); 

     Intent clickIntent = new Intent(this, MainActivity.class); 
     PendingIntent clickPI = PendingIntent.getActivity(this, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     remoteViews.setPendingIntentTemplate(R.id.list_view, clickPI); 
     appWidgetManager.updateAppWidget(thisWidget, remoteViews); 

    } 
+0

感謝生病嘗試在一分鐘內 – 2015-03-31 07:10:25

+0

仍然沒有工作,我記錄的價值和它的改變活動,但我注意到,如果我在onUpdate方法中放置一個日誌,那麼它將只在應用程序啓動時被調用一次,而不是每次我點擊所以也許這是相關的 – 2015-03-31 07:20:34

0

試試這個,我認爲它會向你::有用here

0

找到了解決方案使用Programmatically update widget from activity/service/receiver

當我更改活動中的布爾值時,我應該調用fol降脂:

Intent intent = new Intent(activity,ApWidgetProvider.class); 
     intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
     int ids[] = AppWidgetManager.getInstance(activity.getApplication()).getAppWidgetIds(new ComponentName(activity.getApplication(), ApWidgetProvider.class)); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids); 
     activity.sendBroadcast(intent); 

的onUpdate方法:

public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) 
    { 

     final int N = appWidgetIds.length; 

     for (int i = 0; i < N; i++) 
     { 
      final int appWidgetId = appWidgetIds[i]; 
      RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.rz_widget_layout); 

      Intent intent=null; 

      int j=0; 
      if(MainActivity.WidgetAppLuancherChecker){j=1;intent= new Intent(context, MainActivity.class);} 
      else{j=2;intent= new Intent(context, ActivityB.class);} 

      PendingIntent pendingIntent = PendingIntent.getActivity(context,j,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
      views.setOnClickPendingIntent(R.id.RelativeWidget, pendingIntent); 

      appWidgetManager.updateAppWidget(appWidgetId, views); 
     } 
    } 
相關問題