嘿,我想在如何更新TextView
Activity
的正确途径中获得提示。
情况是当前Activity1
计算给定任务,结果应该在用户点击时显示在Activity2
中。当用户返回Activity1
计算然后点击时,结果应该更新。
但结果却是以前的值。
答案 0 :(得分:2)
您必须在公共变量或 sharedpreferences 中维护您的数据。恢复活动后,您可以从公共变量或共享偏好中获取值,然后您可以更新textview。
注意: 阅读有助于您完成该任务的activity Lifecycle。
答案 1 :(得分:1)
您可以使用bundle,sharedpreferences或使用静态变量来传递/获取值,这些变量无效因为它们是临时的。
编辑(你要求保持背面,以便给出共享偏好的例子):
这是您的 SharedPreferences 类,它是静态的,因此您可以从每项活动中获取。
public class SharedPref {
public static void setDefaults(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getDefaults(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
}
这是您在SharedPreferences
中设置和获取数据的方法设置:强>
SharedPref.setDefaults("your_tag", "your_string_you_want_to_put", context);
获取:强>
SharedPref.getDefaults("your_tag", getApplicationContext())
所以,你可以像这样设置你的textview(你应该考虑做一个空检查或try / catch块):
tv.setText(SharedPref.getDefaults("your_tag", getApplicationContext()));
(如果需要,会保留这个,但这是一种单向方法)
这是一个如何实现的捆绑示例:
在你的Activity1中:
Intent i = new Intent(Activity1.this,Activity2.class);
i.putExtra("string_tag", "string_value");
startActivity(i);
在你的Activity2中:
TextView tv = (TextView)findViewById(R.id.yourView);
tv.setText(getIntent().getStringExtra("string_tag"));
答案 2 :(得分:1)
你也可以在这样的意图中发送你的价值:
public void sendMessage(View view) {
Intent intent = new Intent(this, Activity2.class);
EditText editText = (EditText) findViewById(R.id.whatever);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
并收到它:
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
答案 3 :(得分:0)
我不同意上一张海报的想法。我会这样做的:
使用预期结果启动活动:
Intent i = new Intent(CurrentActivity.this, SecondActivity.class);
i.putIntExtra("intToPass", 5);
startActivityForResult(i, REQUEST_CODE);
从SecondActivity将结果传递回完成时的活动1:
@Override
public void finish() {
// Prepare data intent
Intent data = new Intent();
data.putExtra("returnValue", returnValue);
// Activity finished ok, return the data
setResult(RESULT_OK, data);
super.finish();
返回第一个活动:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
if (data.hasExtra("returnValue")) {
Toast.makeText(this, data.getExtras().getString("returnValue"),
Toast.LENGTH_SHORT).show();
//Do something with your precious return value ;)
}
}
}
如果您需要保存以供日后使用,请使用sharedpreferences
编辑:REQUEST_CODE& RESULT_OK是您自己定义的整数