1

Here's my code so far.

 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());
}

When I go out and pick a contact, the Log says that in outState the correct value is there, but onCreate logs SavedInstanceState is null.

What am I not doing right here? Is it maybe something to do with the Intent from onActivityResult?

EDIT: Duh!

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

That was starting a new activity not going back to my current one.

TMH
  • 6,096
  • 7
  • 51
  • 88

1 Answers1

3

If you using activity you should use:

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

but if you are using fragment use:

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

here you can read more: Save and Restore

Community
  • 1
  • 1
Dariusz Mazur
  • 587
  • 5
  • 21
  • Even though that wasn't the problem (see my edited post) this has helped my understand using savedInstanceStates. Thanks – TMH Sep 06 '13 at 13:58