简体   繁体   English

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

[英]How to send data from an activity which received data using getIntent()?

I have an activity which uses an Adapter and RecyclerView to display a number of contacts to the user (activity A).我有一个活动,它使用 Adapter 和 RecyclerView 向用户显示多个联系人(活动 A)。 The user can tap on a contact to view its info (activity B).用户可以点击联系人以查看其信息(活动 B)。 They may then choose to edit that info;然后他们可以选择编辑该信息; for this the user is taken to EditContact (activity C).为此,用户被带到 EditContact(活动 C)。

Is it possible to use startActivityForResult() in activity B to edit the database information in activity C and update the database and layout of activity B on RESULT_OK ?是否可以在活动 B 中使用startActivityForResult()来编辑活动 C 中的数据库信息并在RESULT_OK上更新活动 B 的数据库和布局?

EDIT Adding code snippets for clarity:编辑为了清楚起见添加代码片段:

New/Edit Contact activity:新建/编辑联系人活动:

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

ViewContact activity:查看联系人活动:

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

Yes it is possible.对的,这是可能的。 In Activity B, you can to start EditContact activity as follows:在活动 B 中,您可以按如下方式启动 EditContact 活动:

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

When you're done editing the contact in EditContact activity, return RESULT_OK with edited contactItem and finish the activity:当你完成编辑在EditContact活动的联系人,返回RESULT_OK与编辑contactItem并完成活动:

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

Then, in Activity B, handle the results as follow:然后,在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.

相关问题 如何通过使用getIntent()而不是usinf将数据从一个活动发送到另一个活动new Intent(); - How to send data from one activity to another by using getIntent() instead of usinf new Intent(); 使用 singleTask 活动时清除 getIntent() 数据 - Clearing getIntent() data when using singleTask activity 如何将接收到的蓝牙数据从一个主要活动发送到两个片段? - How to send received Bluetooth data from a main activity to two fragments? 如何通过意图发送从另一个活动发送的数据? - How to send the data which is sent from another activity by intent? Android将接收到的数据从套接字服务发送到Activity - Android send received data from a socket service to Activity android 从 getintent 中删除数据 - android remove data from getintent 如何使用 getIntent().getSerializableExtra 从数据库中检索数据 - How do i use getIntent().getSerializableExtra to retrieve data from the database 如何使用 MVP 模式将数据从 Fragment 发送回 Activity - How to send data from Fragment back to Activity using MVP pattern 如何使用接口将数据从活动发送到Android中的Fragment? - How to send data from an activity to a Fragment in Android using interfaces? 如何使用 putExtra 从 Activity 向 Java Class 发送数据? - How to send data by using putExtra from an Activity to a Java Class?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM