2012-04-19 60 views
0

我有一个SharedPreferences可以保存一个活动的EditText输入,并在另一个活动中显示String值。如何显示来自EditText用户输入的值?

当我在EditText字段中输入一个输入并按下(我创建的一个按钮)“Save”(将EditText提交给编辑器)时,该文件被成功存储。但是,显示活动(显示SharedPreferences中存储的字符串值)不显示值。我猜测这是因为它是onCreate,因此屏幕在运行时会“创建”。如何在用户立即提交(按下保存)时更新EditText值?

CustomStoreEditActivity - 只需存储用户输入(EditText上的条目):

final Button saveButton = (Button) findViewById(R.id.saveButton); 
    saveButton.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      if (saveButton.isClickable()) { 
       SharedPreferences prefs = getSharedPreferences(
         "customtime", 0); 
       // prefs.registerOnSharedPreferenceChangeListener(this); 
       final SharedPreferences.Editor edit = prefs.edit(); 
       EditText shopName = (EditText) findViewById(R.id.shopName); 
       EditText open1 = (EditText) findViewById(R.id.open1); 
       EditText close1 = (EditText) findViewById(R.id.close1); 
       EditText open2 = (EditText) findViewById(R.id.open2); 
       EditText close2 = (EditText) findViewById(R.id.close2); 
       EditText open3 = (EditText) findViewById(R.id.open3); 
       EditText close3 = (EditText) findViewById(R.id.close3); 
       EditText open4 = (EditText) findViewById(R.id.open4); 
       EditText close4 = (EditText) findViewById(R.id.close4); 
       EditText open5 = (EditText) findViewById(R.id.open5); 
       EditText close5 = (EditText) findViewById(R.id.close5); 
       EditText open6 = (EditText) findViewById(R.id.open6); 
       EditText close6 = (EditText) findViewById(R.id.close6); 
       EditText open7 = (EditText) findViewById(R.id.open7); 
       EditText close7 = (EditText) findViewById(R.id.close7); 
       EditText comments = (EditText) findViewById(R.id.comments); 
       edit.putString("shopName", shopName.getText().toString()); 
       edit.putString("Monday1", open1.getText().toString()); 
       edit.putString("Monday2", close1.getText().toString()); 
       edit.putString("Tuesday1", open2.getText().toString()); 
       edit.putString("Tuesday2", close2.getText().toString()); 
       edit.putString("Wednesday1", open3.getText().toString()); 
       edit.putString("Wednesday2", close3.getText().toString()); 
       edit.putString("Thursday1", open4.getText().toString()); 
       edit.putString("Thursday2", close4.getText().toString()); 
       edit.putString("Friday1", open5.getText().toString()); 
       edit.putString("Friday2", close5.getText().toString()); 
       edit.putString("Saturday1", open6.getText().toString()); 
       edit.putString("Saturday2", close6.getText().toString()); 
       edit.putString("Sunday1", open7.getText().toString()); 
       edit.putString("Sunday2", close7.getText().toString()); 
       edit.putString("comments", comments.getText().toString()); 
       edit.commit(); 
       Intent myIntent = new Intent(getBaseContext(), 
         CustomStoreActivity.class); 
       myIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
       startActivity(myIntent); 

       Toast.makeText(getBaseContext(), "Opening Hours Saved!", 
         Toast.LENGTH_SHORT).show(); 

      } 

     } 
    }); 

} 

CustomStoreActivity - 在那里我相信问题在于:

private void displayPreferences(){ 

    SharedPreferences prefs = getSharedPreferences("customtime", 0); 
    String shopName = prefs.getString("shopName", "Empty"); 
    String shopTime1 = prefs.getString("Monday1", " "); 
    String shopTime2 = prefs.getString("Monday2", " "); 
    String shopComments = prefs.getString("comments", ""); 

    TextView displayPrefs = (TextView) findViewById(R.id.displayPrefs); 

    displayPrefs.setText(shopName + shopTime1 + shopTime2 + shopComments); 

} 

感谢您有充足的时间。

回答

1

我认为你要找的部分是将你的CustomStoreActivity代码放在onResume而不是onCreate。无论何时将CustomStoreActivity带到最前面(包括首次创建时),您将进入onResume的代码都会发生。

另一种选择,假定CustomStoreActivity是用来发射包含EditText S,是使用startActivityForResult并将数据传递回结果Intent而不是使用SharedPreferencesActivityHere是一个简单的例子(尽管请注意setResult呼叫在这个例子中传递null,你想在一个Intent通过,如记录在Android文档here)。

它也似乎是你想要使用你的第二个Activity像一个带有可编辑字段的对话框。如果是这样,另一种选择是在CustomStoreActivity类中实际使用Dialog类的变体,而不是创建另一个Activity以表现类似。请参阅Android文档dialogs

+0

这很有效,非常感谢Jon。我不知道我可以从另一个MapActivity重新调用OnResume()。谢谢。 – DesignAndCode 2012-04-19 17:52:37

+0

不客气;不过,你不应该手动调用'onResume'。我假设你正在查看'CustomStoreActivity'开始,然后启动编辑器'Activity',在这种情况下,当你在前台关闭'Activity'时,它应该由Android框架自动完成重新使用来更新文本字段)。 – 2012-04-19 18:26:44

0

我不确定我是否真的了解您的问题,但您是否正在尝试更新您所在行动中不同活动的TextView?在这种情况下,我不认为这是可以做到的,你应该使用Intents将数据传递给活动

相关问题