从Fragment开始一个Activity,然后关闭这个Activity返回值给Fragment

本文详细介绍了在Android应用中如何使用startActivityForResult方法启动一个新的Activity,并在返回时通过Intent和Bundle传递数据。同时,讲解了如何在Fragment中重写onActivityResult方法来接收返回的数据。

开始一个Activity必须用

startActivityForResult(intent, 999);//这个999是requestCode,可以根据需要自己写

在关闭Activity之前写

Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putInt("orderItemID", m_orderItem.getId());//根据自己的实际需要写
intent.putExtras(bundle);
setResult(RESULT_OK, intent);
finish();

在Fragment中重写onActivityResult

@Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if (resultCode==-1) {//-1就是RESULT_OK的值
              ...写你的逻辑
    }

}

在 Android 中,如果你想要获取一个 `Activity` 中的**全部 Fragment**,可以通过 `FragmentManager` 来实现。具体方式取决于你是使用 `Fragment` 的原生 API 还是 `AndroidX`,以及是否使用了 `ViewPager`、`FragmentStatePagerAdapter` 等组件。 --- ### ✅ 方法一:通过 `FragmentManager` 获取已添加的 Fragment ```kotlin val fragmentManager = supportFragmentManager // 或 fragmentManager(如果是原生 Fragment) val fragments = fragmentManager.fragments ``` - `supportFragmentManager`:用于兼容 AndroidX 或 Support Library 的 Fragment。 - `fragmentManager.fragments`:返回当前 `FragmentManager` 中**所有已添加的 Fragment**(即通过 `add()` 添加的 Fragment)。 - 返回值类型为 `List<Fragment>`。 > ⚠️ 注意:此方法只能获取通过 `add()` 添加的 Fragment,无法获取通过 `replace()` 添加且已移除的 Fragment。 --- ### ✅ 方法二:如果你使用了 `ViewPager` + `FragmentPagerAdapter` / `FragmentStatePagerAdapter` 你无法直接从 `ViewPager` 获取所有 Fragment,但可以在自定义的 `PagerAdapter` 中缓存 Fragment 实例。 示例: ```kotlin class MyPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) { private val fragments = mutableMapOf<Int, Fragment>() override fun getItem(position: Int): Fragment { return when (position) { 0 -> FragmentA() 1 -> FragmentB() else -> FragmentC() } } override fun getCount(): Int = 3 override fun instantiateItem(container: ViewGroup, position: Int): Any { val fragment = super.instantiateItem(container, position) as Fragment fragments[position] = fragment return fragment } override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { fragments.remove(position) super.destroyItem(container, position, `object`) } fun getFragment(position: Int): Fragment? = fragments[position] } ``` --- ### ✅ 方法三:使用 `ViewPager2` + `FragmentStateAdapter` `ViewPager2` 不支持直接获取 Fragment,但你可以通过 `FragmentStateAdapter` 配合 `FragmentMaxLifecycleEnabler` 或使用 `FragmentManager` 遍历查找。 --- ### 总结: | 方法 | 适用场景 | 是否推荐 | |------|----------|----------| | `fragmentManager.fragments` | 获取当前添加的所有 Fragment | ✅ 推荐 | | 自定义 `PagerAdapter` 缓存 | ViewPager + FragmentPagerAdapter | ✅ 推荐 | | `ViewPager2` 获取 Fragment | 需配合 FragmentManager 遍历 | ⚠️ 复杂,不推荐 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值