首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用onSaveInstanceState问题

使用onSaveInstanceState问题
EN

Stack Overflow用户
提问于 2013-09-06 13:37:47
回答 1查看 1.2K关注 0票数 1

到目前为止,这是我的密码。

代码语言:javascript
复制
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (savedInstanceState != null) {
        Log.d("FUApp", "Creating: " + savedInstanceState.toString());
    }
    else
    {
        Log.d("FUApp", "SavedInstanceState is null");
    }
    setContentView(R.layout.activity_invite_friends);

    inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    formHolder = (LinearLayout) findViewById(R.id.form_holder_layout);
    addNewRow();
    TelephonyManager tMgr =(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    String yourPhoneNumber = tMgr.getLine1Number();

    your_name = (TextView) findViewById(R.id.your_name);
    your_phone_number = (TextView) findViewById(R.id.your_phone_number);
    your_phone_number.setText(yourPhoneNumber);
}



public void addNewRow() {
    inflater.inflate(R.layout.form_invite_friend, formHolder, true);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = new MenuInflater(this);
    menuInflater.inflate(R.menu.activity_invite_friend, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.invite_friend_menu:
            Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
            startActivityForResult(intent, 1);

            addNewRow();
            break;
        default:
            super.onOptionsItemSelected(item);
    }
    return true;
}

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        Uri contactData = data.getData();
        Cursor c =  managedQuery(contactData, null, null, null, null);
        if (c.moveToFirst()) {
            String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
            Intent intent = new Intent(ActivityInviteFriends.this, ActivityInviteFriends.class);
            intent.putExtra("name", name);
            startActivityForResult(intent, 0);
        }
    }
}


@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("your_name", String.valueOf(your_name.getText()));
    Log.d("FUApp", "onSaveInstanceState: " + outState.toString());
}

当我出去选择一个联系人时,日志说在outState中有正确的值,但是onCreate日志SavedInstanceState是空的。

我没在这儿干嘛?这可能与onActivityResult的意图有关吗?

编辑:嗯!

代码语言:javascript
复制
Intent intent = new Intent(ActivityInviteFriends.this, ActivityInviteFriends.class);
intent.putExtra("name", name);
startActivityForResult(intent, 0);

这开始了一项新的活动,而不是回到我现在的活动。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-06 13:42:28

如果您使用活动,则应使用:

代码语言:javascript
复制
 @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
}

但是,如果您正在使用片段,请使用:

代码语言:javascript
复制
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);
}

在这里您可以阅读更多内容:Save and Restore

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18659205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档