![](/img/trans.png)
[英]How to send data from one activity to another by using getIntent() instead of usinf new Intent();
[英]How to send data from an activity which received data using getIntent()?
我有一个活动,它使用 Adapter 和 RecyclerView 向用户显示多个联系人(活动 A)。 用户可以点击联系人以查看其信息(活动 B)。 然后他们可以选择编辑该信息; 为此,用户被带到 EditContact(活动 C)。
是否可以在活动 B 中使用startActivityForResult()
来编辑活动 C 中的数据库信息并在RESULT_OK
上更新活动 B 的数据库和布局?
编辑为了清楚起见添加代码片段:
新建/编辑联系人活动:
// 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();
}
查看联系人活动:
// On successful result, add the new contact & update the UI
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == EDIT_CONTACT_REQUEST && resultCode == RESULT_OK) {
int id = data.getIntExtra(EXTRA_ID, -1);
// Check ID != -1 just in case, which shouldn't happen
if (id == -1) {
Toast.makeText(this, "Contact not updated", Toast.LENGTH_SHORT).show();
return;
}
String name = data.getStringExtra(EXTRA_NAME);
String surname = data.getStringExtra(EXTRA_SURNAME);
String company = data.getStringExtra(AddNewContact.EXTRA_COMPANY);
String phoneNumber = data.getStringExtra(AddNewContact.EXTRA_PHONE_NUMBER);
String phoneType = data.getStringExtra(AddNewContact.EXTRA_PHONE_TYPE);
String email = data.getStringExtra(AddNewContact.EXTRA_EMAIL);
String emailType = data.getStringExtra(AddNewContact.EXTRA_EMAIL_TYPE);
String address = data.getStringExtra(AddNewContact.EXTRA_ADDRESS);
String postcode = data.getStringExtra(AddNewContact.EXTRA_POSTCODE);
Contact contact =
new Contact(
name,
surname,
company,
phoneNumber,
phoneType,
email,
emailType,
address,
postcode);
contact.setId(id);
// TODO - this does not work, must use LiveData?
// Update the database
ContactRepository contactRepository = new ContactRepository(getApplication());
contactRepository.update(contact);
Toast.makeText(this, "Contact updated", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Contact not updated", Toast.LENGTH_SHORT).show();
}
对的,这是可能的。 在活动 B 中,您可以按如下方式启动 EditContact 活动:
Intent intent = new Intent(this, EditContact.class);
intent.putExtra(EditContact.EXTRA_CONTACT_ITEM, contactItem);
startActivityForResult(intent, EDIT_CONTACT_REQUEST_CODE);
当你完成编辑在EditContact活动的联系人,返回RESULT_OK
与编辑contactItem并完成活动:
Intent resultIntent = new Intent();
resultIntent.putExtra(EXTRA_CONTACT_ITEM, contactItem);
setResult(RESULT_OK, resultIntent);
finish();
然后,在Activity 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
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.