在活动中更新TextView

时间:2014-04-15 12:50:32

标签: android android-intent android-activity

嘿,我想在如何更新TextView Activity的正确途径中获得提示。

情况是当前Activity1计算给定任务,结果应该在用户点击时显示在Activity2中。当用户返回Activity1计算然后点击时,结果应该更新。

但结果却是以前的值。

4 个答案:

答案 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是您自己定义的整数