如何从使用getIntent()接收数据的活动发送数据?

时间:2019-12-09 08:43:55

标签: android android-intent

我有一个活动,该活动使用Adapter和RecyclerView向用户显示许多联系人(活动A)。用户可以点击联系人以查看其信息(活动B)。然后,他们可以选择编辑该信息。为此,用户将被带到EditContact(活动C)。

是否可以在活动B中使用body h1 { color: red; text-align: center; } 来编辑活动C中的数据库信息,并更新活动startActivityForResult()上活动B的数据库和布局?

编辑 为了清楚起见添加代码段:

新建/编辑联系人活动:

RESULT_OK

ViewContact活动:

// Pass the data to the ViewContact activity
Intent addNewContact = new Intent();
addNewContact.putExtra(EXTRA_NAME, name);
addNewContact.putExtra(EXTRA_SURNAME, surname);
addNewContact.putExtra(EXTRA_COMPANY, company);
addNewContact.putExtra(EXTRA_PHONE_NUMBER, phoneNumbers);
addNewContact.putExtra(EXTRA_PHONE_TYPE, phoneTypes);
addNewContact.putExtra(EXTRA_EMAIL, emails);
addNewContact.putExtra(EXTRA_EMAIL_TYPE, emailTypes);
addNewContact.putExtra(EXTRA_ADDRESS, addresses);
addNewContact.putExtra(EXTRA_POSTCODE, postcode);
[...]

if (name.length() > 0 && phoneNumbers.length() > 0) {
    if (id != -1) {
        addNewContact.putExtra(EXTRA_ID, id);
    }
    setResult(RESULT_OK, addNewContact);
    onBackPressed(); // or finish()
} else {
    Toast.makeText(this, "Please enter at least a name and phone no.", 
    Toast.LENGTH_LONG).show();
}

1 个答案:

答案 0 :(得分:1)

是的,有可能。在活动B中,您可以按以下方式启动EditContact活动:

Intent intent = new Intent(this, EditContact.class);
intent.putExtra(EditContact.EXTRA_CONTACT_ITEM, contactItem);
startActivityForResult(intent, EDIT_CONTACT_REQUEST_CODE);

在EditContact活动中完成联系人的编辑后,返回带有编辑后的contactItem的RESULT_OK并完成活动:

Intent resultIntent = new Intent();
resultIntent.putExtra(EXTRA_CONTACT_ITEM, contactItem);
setResult(RESULT_OK, resultIntent);
finish();

然后,在活动B中按以下方式处理结果:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == EDIT_CONTACT_REQUEST_CODE) {
            if(resultCode == Activity.RESULT_OK) {
                ContactItem contactItem= data.getParcelableExtra(EXTRA_CONTACT_ITEM);
                //Store item in database
            }
    }
}