在我的应用程序中,我有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;

最佳答案

首先,看看Android的生命周期

java - 通过SharedPreference传递EditText内容-LMLPHP

这样,创建活动后,只需调用一次onCreate方法,如图所示。

因此,在editText方法中获取onCreate的文本将导致文本为空(如果未预先填充)。

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


您可以添加“保存” button。由于用户可能会输入一些内容并改变主意,因此我建议这样做,并且单击“返回”将取消该操作。
您可以将editText值保存在onPauseSettingsActivity处。无论用户何时退出活动,此方法都会覆盖该值。


注意:请记住在settingsActivity中填充onCreate/onResume的文本,否则该文本将始终为空。

还有一点是,始终如您在图片中所见,一旦您从设置中回来,就不会再次调用活动onCreate。因此,您必须在onResume方法中从SharedPreference中获取值并将其放入您的MainActivity's文本视图中。

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

关于java - 通过SharedPreference传递EditText内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46179821/

10-13 09:10