2012-10-11 26 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