【问题标题】:onSaveInstanceState() not saving data from the intentonSaveInstanceState() 不保存意图中的数据
【发布时间】:2015-05-23 18:23:23
【问题描述】:

我有一个表格。在这里,用户填写事件名称、描述、位置等详细信息。要选择位置,我设置了一个按钮。当我点击按钮时,我被带到另一个页面/意图。我从那里选择位置,并将位置数据正确地传递回我的原始意图。但问题是,用户填写的其他字段(如事件、描述等)中的数据会丢失。我之前发布了this 问题并尝试了这些问题。我也提到了this,并尝试像这样使用onSaveInstanceState

private static final String ENAME = "ENAME";
private static final String DESC = "DESC";
private static final String SDATE = "SDATE";
private static final String EDATE = "EDATE";
private static final String STIME = "STIME";
private static final String ETIME = "ETIME";

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    final String name = etename.getText().toString();
    savedInstanceState.putString(ENAME, name);
    final String des = etdes.getText().toString();
    savedInstanceState.putString(DESC, des);
    final String sdt = StartDate.getText().toString();
    savedInstanceState.putString(SDATE, sdt);
    final String edt = EndDate.getText().toString();
    savedInstanceState.putString(EDATE, edt);
    final String stm = StartTime.getText().toString();
    savedInstanceState.putString(STIME, stm);
    final String etm = EndTime.getText().toString();
    savedInstanceState.putString(ETIME, etm);

    // Put (save) other values into the outState bundle...

    super.onSaveInstanceState(savedInstanceState);
}

我在onCreate() 之前有那个功能;这是我的 onCreate();

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.eventcreaten);

    etename = (EditText) findViewById(R.id.etename);
    etdes = (EditText) findViewById(R.id.etdes);
    StartDate = (EditText) findViewById(R.id.etstartdate1);
    EndDate = (EditText) findViewById(R.id.etenddate1);
    btnCreateEvent = (Button) findViewById(R.id.btncreate);
    tvd2 = (TextView) findViewById (R.id.tvd2);
    tved2 = (TextView) findViewById (R.id.tved2);
    tvg = (TextView) findViewById (R.id.tvg);
    StartTime = (EditText) findViewById (R.id.etstartt1);
    EndTime = (EditText) findViewById (R.id.etendt1);


    if (savedInstanceState != null) {
        final String name = savedInstanceState.getString(ENAME, "");
        etename.setText(name);
        final String des = savedInstanceState.getString(DESC, "");
        etdes.setText(des);
        final String sdt = savedInstanceState.getString(SDATE, "");
        StartDate.setText(sdt);
        final String edt = savedInstanceState.getString(EDATE, "");
        EndDate.setText(edt);
        final String stm = savedInstanceState.getString(STIME, "");
        StartTime.setText(stm);
        final String etm = savedInstanceState.getString(ETIME, "");
        EndTime.setText(etm);
    } else {
        // No saved values to restore
    }

而且它不起作用。有人能指出原因吗?

【问题讨论】:

  • 你的activity是直接扩展Activity类还是有链?
  • @ruan65 是的,它扩展了 Activity
  • 您确定在您从其他活动返回时会调用onCreate() 吗?此 Activity 可能不会被销毁,在这种情况下,onCreate() 将不会被再次调用。
  • @DanielNugent,嗯,是的,很好的观察。但如果不销毁,为什么不保留之前的数据呢?
  • @YohanBlake 很难说。你现在是用startActivityForResult()打开Map2.class吗?

标签: java android android-intent


【解决方案1】:

不确定你是否让它工作。但我得到了它的工作。

public class TestingForSO extends ActionBarActivity {
    private static final String ENAME = "ENAME";
    EditText etename;
    String name = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_testing_for_so);
        if (savedInstanceState != null) {
            name = savedInstanceState.getString(ENAME, "");
            Log.e("NAME", "saved");
        } else{
            Log.e("NAME", "not_saved");
        }
        etename = (EditText) findViewById(R.id.etename);
        etename.setText(name);
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        Log.e("NAME", "Saving");
        savedInstanceState.putString(ENAME, etename.getText().toString());
    }
}

【讨论】:

  • 我会在一个单独的活动中运行它来测试它。如果它不起作用,那一定是代码中的错误。
  • 我相信代码 sn-p 是有效的。我要请你们帮我找出我的代码出了什么问题
  • 尝试去掉 onSaveInstanceState 中的字符串。只需将 edittext 串入值并测试它。让我知道这是否有效。
  • 好吧,让我们调用 Log.e("Called","onSaveInstanceState");处于已保存的实例状态。 Log.e("调用","加载");在 onCreate != null。告诉我叫什么。
猜你喜欢
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多