Java 通过SharedReference传递EditText内容
在我的应用程序中,我有两个活动,我想在SettingsActivity的EditText中键入URL地址,并在MainActivity中使用它,但我无法 这是我的设置活动:Java 通过SharedReference传递EditText内容,java,android,Java,Android,在我的应用程序中,我有两个活动,我想在SettingsActivity的EditText中键入URL地址,并在MainActivity中使用它,但我无法 这是我的设置活动: public class SettingsActivity extends Activity { Switch aSwitch; EditText editText; String URL_ENDPOINT; @Override protected void onCreate(Bundle savedInstanceS
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));
}
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;
这是我的主要活动:
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));
}
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;
将此代码放在onPause()方法中首先,看看Android的生命周期 现在,也就是说,
onCreate
方法在创建活动时只调用一次,如图所示
因此,在onCreate
方法中获取editText
的文本将导致空文本(如果未预填充)
由于我认为您希望创建一个设置活动,为main活动设置一些内容,因此有两种方法可以实现您的目标:
您可以添加“保存”按钮
。由于用户可能会输入一些内容并改变主意,因此我将重新发送此消息,这样单击“返回”将取消操作
您可以将editText
值保存在SettingsActivity
的onPause
。无论发生什么情况,每次用户退出活动时,此方法都将覆盖该值
注意:请记住在onCreate/onResume
中弹出settingsActivity
的文本,否则它将始终为空
另外一点是,正如您在图中所看到的,一旦您从设置返回,将不会再次调用“活动”onCreate
。因此,在onResume
方法中,您可以从SharedReference
中获取值,并将其放入MainActivity的
textview中
首先,我建议您研究一下生命周期
,因为它确实是Android编程的核心信息。当设置活动被创建时,您的EditText是空的,对吗?onCreate()中的EditText.getText().toString()
)
将始终返回空字符串。您是否已通过打印该URL字符串的登录MainActivity进行检查?非常感谢,它起到了作用,但我还有一个问题:当我在EditText中键入URL并按“上一步”时,EditText将变为空,我该怎么做才能使我的URL即使在我按Back键时仍保留在TextView中?@Amiroff抱歉,但我不明白。。你指的是哪个edittext/textview?对不起,我错了,我在上一条评论中写的是textview而不是edittext。。。我想保留编辑文本的内容,即使我按下Back@amirofff阅读我的答案,如果您在onCreate中启用该值,则每次进入设置活动时,该值都将初始化。使用与为MainActivity检索内容相同的方法执行此操作否,在我的设置Activity中,我将SharedPref放在onPause()方法中,但当我按Back键时,我的EditText将更改为空,即使返回MainActivity,我也希望将内容保存在EditText中