将数据从活动传递回已创建的片段

时间:2019-05-26 16:29:01

标签: android android-fragments android-activity android-navigation-drawer android-navigation

银行应用:

我有一个NavigationDrawerActivity,其中包含更多片段。每个片段都是在单击菜单项后创建的。

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.nav_home) {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
    } else if (id == R.id.nav_transfer) {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new TransferFragment()).commit();
    }
    return true;
}

如果单击“传输”菜单项,则会创建TransferFragment。该片段负责将简单的资金从一个银行帐户转移到另一个银行帐户。我在此片段中有一个“选择帐户”按钮,该按钮启动(使用意图)新活动-ChooseAccountActivity 。此活动只是一个listView,其中包含可用于从中进行转帐的所有帐户。

用户单击其中一个帐户后,应将accountId(字符串)发送给返回到TransferFragment,以便用户能够继续填写其他EditText(金额,接收者的帐户ID等) )

“ ChooseAccountActivity”中的方法:

public void eventAfterClickOnListViewItem() {
    accountsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String accountId = allAccountsList.get(position);
            //PASS accountId back to TransferFragment
            finish();
        }
    });
}

所以我需要将数据(accountId)发送回TransferFragment。但是Intent不起作用,因为我使用片段。已经创建了TransferFragment,因此仅在返回到片段之后才调用onStart,onResume..。

任何技巧或建议如何将数据从活动传递到已创建的片段?我是对的还是应该改变想法?

1 个答案:

答案 0 :(得分:1)

您可以在TransferFragment中使用startActivityForResult来启动ChooseAccountActivity,并在TransferFragment中覆盖onActivityResult以获取accountId。 请务必阅读this以获取片段中的结果。