1

これまでの私のコードは次のとおりです。

 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 が null です。

私はここで何をしていないのですか?onActivityResult の Intent と何か関係があるのでしょうか。

編集:当たり前!

Intent intent = new Intent(ActivityInviteFriends.this, ActivityInviteFriends.class);
intent.putExtra("name", name);
startActivityForResult(intent, 0);

それは、現在の活動に戻るのではなく、新しい活動を開始することでした。

4

1 に答える 1

3

アクティビティを使用する場合は、次を使用する必要があります。

 @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
}

ただし、フラグメントを使用している場合:

@Override
public void onViewStateRestored(Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);
}

ここで詳細を読むことができます:保存と復元

于 2013-09-06T13:42:28.370 に答える