java - 安卓 : How to save data (Intent's Data)

标签 java android android-intent android-activity android-studio

三个Activity代码下面有一个使用Intent传递数据的示例代码。

Activity A

public class A extends AppCompatActivity {

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

public void onButton1Clicked(View v) {
    Intent intent = new Intent(getApplicationContext(), B.class);
    startActivity(intent);
}

Activity B

public class B extends AppCompatActivity {

TextView tv;
ImageButton ib;

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

    tv = (TextView) findViewById(R.id.textView);
    ib = (ImageButton) findViewById(R.id.imageButton);
    ib.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(B.this, C.class);
            startActivityForResult(intent, 2);
        }
    });

}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 2) {
        if (data != null) {
            String message = data.getStringExtra("DATA");
            tv.setText(message);
        }
    }
}

public void onButton2Clicked(View v) {
    Intent intent = new Intent(getApplicationContext(), C.class);
    startActivity(intent);
}

Activity C

public class C extends AppCompatActivity {

EditText et;
Button btn;


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

    et = (EditText) findViewById(R.id.editText);
    btn = (Button) findViewById(R.id.button);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String data = et.getText().toString();
            Intent intent = new Intent();
            intent.putExtra("DATA", data);
            setResult(2, intent);
            finish();
        }
    });
}

Activity 的顺序是A - B - C。

A中有一个可以移动到B的Button,B中有一个Button(可以移动到C)和TextView。在C中,一个Button(可以再次移动到B)和EditText。

例如,使用“startActivityForResult”,我将输出作为 TextView(B),它接收到由 C 中的 EditText 输入的文本。但是在将 B 移动到 A(Back) 之后,当进入 B 时,插入的 TextView 消失了再次。另外,即使进入C,也没有插入EditText。

我真的需要并且知道在 C 中按下按钮时通过输入 EditText 将“保存代码”保存到变量中。

在这种情况下,我如何添加“代码”来保留插入值,或者通过退出应用程序保留插入值,或者移动到像 A 一样接收数据的 Activity?

感谢您的配合与关心。

最佳答案

要保持您的 Activity 状态,您必须覆盖 onSaveInstanceState 方法。在此方法中存储 TextViews 和 EditText 的值。例如,让我们谈谈 Activity B。在 Activity B 中,您将执行如下操作:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    String text = tv.getText().toString();
    savedInstanceState.putString("mytext", text);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

然后在您的 onCreate 中执行此操作:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); // Always call the superclass first
   // Set Content View and initialize the views
    // Check whether we're recreating a previously destroyed instance
    if (savedInstanceState != null) {
        // Restore value of members from saved state
        String mytext = savedInstanceState.getString("mytext");
        tv.setText(mytext);
    } else {
        // Probably initialize members with default values for a new instance
    }
    ...
}

您可以阅读更多关于 Recreating an Activity. 的信息

关于java - 安卓 : How to save data (Intent's Data),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34736166/

相关文章:

android - GCM 的 Unity Android 插件无法在接收时启动服务 Intent

java - 不支持 Android Share Intent 文件格式

java - Spring Data MongoDB 聚合转换?

java - 这个代码段的时间复杂度是O(n^2)还是O(n^3)

java - 在 Java 中创建二维 ArrayList

java - 以编程方式加载 Spring 配置

android - 拦截 HTC sense 上的 ACTION_CALL Intent

android - 程序类型已经存在 : okhttp3. Authenticator$1

android - 如何将数据从 fragment 传递到对话框 fragment

Android:将结果从后台线程返回到各种 Activity 的正确方法