2012-10-11 29 views
0

我正在構建一個Widget,該Widget顯示可在配置類中編輯爲edittext的textview。我剛剛實現了sharedpreferences,因此當用戶第二次或第三次編輯widget時,已輸入的文本將出現在配置類的edittext字段中。帶有SharedPreferences的AppWidget必須更新兩次

它的工作我猜。那麼,在我實現sharedpreferences之前,widget在配置後會更新得很好。但現在,我編輯文本,按apply,但小部件不更新,然後我再次編輯小部件,小部件用我以前應用到它的文本更新。所以我想你可以說,這是一個延遲的更新。我希望我很清楚,這有點難以解釋。

那我做錯了,我無法得到它的工作,任何幫助將是非常讚賞。

代碼:

public class WidgetConfig extends Activity implements OnClickListener { 


    AppWidgetManager awm; 
    int awID; 
    Context c; 
    EditText info; 
    Button b; 
    String note; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.widgetconfig); 

     c = WidgetConfig.this; 
     info = (EditText)findViewById(R.id.etwidgetconfig); 
     b = (Button)findViewById(R.id.bwidgetconfig); 
     loadPrefs(); 
     b.setOnClickListener(this); 

     //Getting Info about the widget that launched this activity 
     Intent i = getIntent(); 
     Bundle extras = i.getExtras(); 
     if (extras != null){ 
      awID = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, 
      AppWidgetManager.INVALID_APPWIDGET_ID); 
     } 

     awm = AppWidgetManager.getInstance(c); 

    } 

    private void loadPrefs(){ 
     SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 
     note = sp.getString("NOTE", "DEFAULT"); 

     info.setText(note); 

    } 

    private void savePrefs(String key, String value){ 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
     SharedPreferences.Editor editor = preferences.edit();  
     editor.putString(key, value); // value to store 
     editor.commit(); 

    } 

    public void onClick(View v) { 
     // TODO Auto-generated method stub 

     savePrefs("NOTE", info.getText().toString()); 

     RemoteViews views = new RemoteViews(c.getPackageName(), R.layout.widget); 
     views.setTextViewText(R.id.tvConfigInput, note); 


     ComponentName thisWidget = new ComponentName(this, Widget.class); 
     AppWidgetManager manager = AppWidgetManager.getInstance(this); 
     manager.updateAppWidget(thisWidget, views); 

     Intent in = new Intent(c, WidgetConfig.class); 
     PendingIntent pi = PendingIntent.getActivity(c, 0, in, PendingIntent.FLAG_UPDATE_CURRENT); 


     views.setOnClickPendingIntent(R.id.B_EditAgain, pi); 

     awm.updateAppWidget(awID, views); 


     Intent result = new Intent(); 
     result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID); 
     setResult(RESULT_OK, result); 
     finish(); 

    } 

} 

回答

1

你沒有真正更新與的EditText字段的值TextView的。您目前的僞代碼如下所示:

​​

這忽略,直到你打電話的onCreate,你觀察到的,下一次在你的EditText值。

您應該更新從的EditText文本的意見:

onClick(){ 
    putSharedPref(info.getText()); 
    views.setText(info.getText()); 
} 
+0

只是簡單快速解決我所期待的,謝謝你了! – Jakob