之前Java的一直顺手就写了,在写Kt时有点小不同,为了省得忘记,顺便做个笔记
在我的认知中,关于Activity → Fragment、Fragment → Fragment 传值方式一般有以下几种
- 传统setArguments方式,主要是通过Bundle传递
- 接口回调
- 类似EventBus三方框架
- 除传统方式外,主要是采用的是观察者模式
- Java 版本
- Kotlin 版本
- 传统方式
- instantiate 方式
- 传递方
TestFragment testFragment= new TestFragment();
Bundle args = new Bundle();
args.putInt("id", 666);
testFragment.setArguments(args);
- 接收方
Bundle bundle = getArguments();
id = bundle.getInt("id");
伪代码示例
if (null == testFragment) {
testFragment= new TestFragment();
}
Bundle bundle = new Bundle();
bundle.putString("name", "拍照");
testFragment.setArguments(bundle);
//方法一传参数
Fragment instantiate = TestFragment.instantiate(this, TestFragment.class.getName(), bundle);
//方法二传参数
getSupportFragmentManager().beginTransaction().replace(R.id.ll_replace, instantiate).addToBackStack(this.getClass().getSimpleName()).commit();
// getSupportFragmentManager().beginTransaction().replace(R.id.ll_replace, takePhotoFragment).addToBackStack(this.getClass().getSimpleName()).commit();
Kotlin 版本
gogogo ~
Activity传参到Fragment
传统方式- 发送方
val fragment = MvPagerFragment()
val bundle = Bundle()
bundle.putString("args", "靓仔")
fragment.arguments = bundle
- 接收方
var any = arguments?.get("args")
instantiate 方式
instantiate 方式可能已过时,但目前尚可使用
- 发送方
val bundle = Bundle()
bundle.putString("type", "1")
var personalCollectionFragment =
Fragment.instantiate(this, PersonalCollectionFragment::class.java.name, bundle)
//以下是我在项目中用到的一段伪代码,可以借鉴
binding.vp.adapter = object : FragmentStateAdapter(this) {
override fun createFragment(position: Int) = when (position) {
0 -> PersonalDynamicFragment()
1 -> personalCollectionFragment
else -> PersonalLikeFragment()
}
override fun getItemCount() = titleList.size
}
- 接收方
var any = arguments?.get("type")



