2013-04-26 20 views
0

내 응용 프로그램이 시작되면 listview 및 첫 번째 항목이있는 활동을 호출합니다.위젯 화면에서 updateAppWidget을 호출하지 마십시오 (처음)

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); 
     } 

을하고 사용자가 화면에 위젯을 추가 할 때, 하나 개 이상의 항목이 자동으로리스트에 추가 내 위젯은의 onUpdate()에서 목록보기에 새 항목을 추가합니다. 하지만 android:updatePeriodMillis 기간이 지나면 추가해야합니다. 어떻게 구현할 수 있습니까?

답변

0

나는 이런 식으로 뭔가를 해결했습니다 : 나는 무엇 방법의 깃발을 넣어 된 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, W IDGET_ACTIVE)는 true를 반환하고 데이터베이스의 마지막 필드를 가져 와서 위젯의 TextView로 보냅니다. 그리고이 경우, 정의 된 시간이 지났을 때, 나는 배열에서 새로운 랜덤 stting을 얻고 데이터베이스에 저장하고 TextView로 보냅니다.