【问题标题】:do not call updateAppWidget at widget screen adding (at first time)不要在添加小部件屏幕时调用 updateAppWidget(第一次)
【发布时间】:2013-04-26 13:57:32
【问题描述】:

当我的应用程序启动时,我使用 listview 和第一个项目调用活动。我的小部件在 onUpdate() 中将新的一项添加到 listView:

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

           RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main_widget);
           myString = context.getResources().getStringArray(R.array.quotes); 

           Intent active = new Intent(context, Widget.class);
           active.setAction(ACTION_WIDGET_RECEIVER);

           Intent archive = new Intent(context, Widget.class);
           archive.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           archive.setAction(ACTION_WIDGET_ARCHIVE);

           String q = myString[rgenerator.nextInt(myString.length)];
           active.putExtra("msg", q);
           if (getQuotes(context).size()>1)
           remoteViews.setTextViewText(R.id.widget_textview, q);

           PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
           PendingIntent archivePendingIntent = PendingIntent.getBroadcast(context, 0, archive,PendingIntent.FLAG_UPDATE_CURRENT);

           remoteViews.setOnClickPendingIntent(R.id.widgetFrameLayout, archivePendingIntent);
           Time now = new Time();
           now.setToNow();
           String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

           // adding new item to the listView
           saveQuote(context, q, mydate);
           appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
      }

当用户将小部件添加到屏幕时,会自动添加一个项目到列表中。但我需要在android:updatePeriodMillis 期过后添加它。我该如何实现?

【问题讨论】:

    标签: android android-widget android-appwidget onupdate


    【解决方案1】:

    我已经解决了这个问题:使用 SharedPreferences 创建了两个方法,我在其中放置了现在执行的方法的标志:

     private void setWidgetActive(Context context, boolean active,String field){
            Context appContext = context.getApplicationContext();
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
            SharedPreferences.Editor edit = prefs.edit();
            edit.putBoolean(field, active);
            edit.commit();
        }
      private boolean getWidgetActive(Context context, String field)
      {
          Context appContext = context.getApplicationContext();
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
        return prefs.getBoolean(field, false);
      }
    

    然后,我的 onEnabled 方法:

        @Override
        public void onEnabled(Context context) {
            super.onEnabled(context);
            setWidgetActive(context,true, WIDGET_ACTIVE);
        }
    

    在 onUpdate 方法中:

      @Override
      public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
          setWidgetActive(context,true, WIDGET_UPDATE);
          if (getWidgetActive(context, WIDGET_UPDATE) & !getWidgetActive(context, WIDGET_ACTIVE))
           {
               myString = context.getResources().getStringArray(R.array.quotes); 
               q = myString[rgenerator.nextInt(myString.length)];
               mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
               saveQuote(context, q, mydate);
           }
           else
           {
              ArrayList<Quote> importList = getQuotes(context);
              q = importList.get(importList.size() - 1).getText();
              mydate = importList.get(importList.size() - 1).getDate();
              setWidgetActive(context,false, WIDGET_ACTIVE);
    
           }
    }
    

    因此,如果刚刚添加了小部件,getWidgetActive(context, WIDGET_ACTIVE) 返回 true,我将获取最后添加的数据库字段并将其发送到小部件的 TextView。在这种情况下,当定义的时间过去后,我会从数组中获取新的随机字符串并保存在数据库中并发送到 TextView。

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 2013-11-08
      • 2014-08-06
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      相关资源
      最近更新 更多