通过SharedPreference传递EditText内容

时间:2017-09-12 15:04:08

标签: java android

在我的应用程序中我有2个活动,我想在SettingsActivity的EditText中键入URL地址并在MainActivity中使用它,但我不能...

这是我的SettingsActivity:

 public class SettingsActivity extends Activity {

Switch aSwitch;
EditText editText;
String URL_ENDPOINT;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    editText = (EditText) findViewById(R.id.etEnd);
    SharedPreferences sp = getSharedPreferences("edittext", Activity.MODE_PRIVATE);
    SharedPreferences.Editor edt = sp.edit();
    String URLValue = editText.getText().toString();
    edt.putString("URL", URLValue);
    edt.commit();
    editText.setText(sp.getString("URL" , URLValue));
}

这是我的MainActivity:

 public class MainActivity extends Activity {


String URL_Endpoint;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_monitoring);


    //get URL for endpoint from SettingsActivity
    SharedPreferences sp = getSharedPreferences("edittext", Activity.MODE_PRIVATE);
    String URL = sp.getString("URL", "");
    URL_Endpoint = URL;

2 个答案:

答案 0 :(得分:1)

首先,看看 Android的生命周期

enter image description here

现在,那就是说,onCreate方法只是在创建活动时调用一次,如图所示。

因此,在editText方法中获取onCreate的文字会产生空文本(如果没有预先填充)。

由于我认为你想创建一个为mainActivity设置一些内容的设置活动,你有两种方法可以实现你的目标:

  1. 您可以添加“保存”button。我会推荐这个,因为用户可能会输入内容并改变主意,这样点击“返回”将取消操作。
  2. 您可以将editText值保存在onPause的{​​{1}}。每次用户退出活动时,此方法都将覆盖该值,无论如何。
  3. 注意:请记住SettingsActivity中的settingsActivity文字,或者它总是为空。

    另外一点是,总是如您在图片中看到的那样,一旦您从设置中回来,就不会再次调用活动onCreate/onResume。因此,您可以使用onCreate方法获取onResume中的值并将其放入SharedPreference文本视图中。

    首先,我建议您研究MainActivity's,因为它确实是编程Android的核心信息。

答案 1 :(得分:0)

SharedPreferences sp = getSharedPreferences("edittext", Activity.MODE_PRIVATE);
SharedPreferences.Editor edt = sp.edit();
String URLValue = editText.getText().toString();
edt.putString("URL", URLValue);
edt.commit();
editText.setText(sp.getString("URL" , URLValue));

将此代码放入onPause()方法