将数据从Activity发送到Fragment - 如何?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数据从Activity发送到Fragment - 如何?相关的知识,希望对你有一定的参考价值。
案例1:我想知道为什么应该使用.setArguments()方法将数据传递给片段?
案例2:为什么我们不能在片段类中使用简单的公共setter属性?
案例1的示例:(伪代码的种类)
Activty {
FragmentA fa = new FragmentA();
Bundle bundle = new Bundle();
bundle.putString("key_1", "Hello");
fa.setArguments(bundle);
//begin fragment transistion
}
案例2的示例:
Activty {
FragmentA fa = new FragmentA();
//setter in frgment class
fa.setPropertyForKey_1("Hello");
//begin fragment transistion
}
这2个案例有什么区别,你推荐哪一个?
难道你不认为在这个简单的场景中创建一个包是开销吗?
答案
两种情况之间的区别:
案例1:屏幕旋转后捆绑信息不会丢失。重新创建FragmentA时,它会再次从捆绑包中接收数据,因此您仍然拥有所需的数据。
案例2:当您旋转设备的屏幕时,片段被销毁,然后由android重新创建。因此,旋转后FragmentA.propertyForKey1的内容将丢失。
所以不,这不是开销,这是必要的。而且我认为在尝试重新发明轮子之前,最好从本机API中获取最佳效果。
另一答案
如果要将数据发送到Activity中的Fragment,最好的方法是创建片段实例。您可以将此代码作为示例;
分段;
class SampleFragment: Fragment{
companion object {
const val KEY_DATA = "data"
const val KEY_OTHER_DATA = "other_data"
fun instance(data:String, otherData:Int): SampleFragment {
val fragment = SampleFragment()
val bundle = Bundle()
bundle.putString(KEY_DATA,data)
bundle.putInt(KEY_OTHER_DATA,otherData)
fragment.arguments = bundle
return fragment
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val data = arguments.getString(KEY_DATA)
val otherData = arguments.getInt(KEY_OTHER_DATA)
}
}
活动;
class SampleActivity: AppCompatActivity() {
@Override
protected void onCreate(Bundle savedInstanceState) {
val sampleFragment = SampleFragment.instance("data",0)
}
}
我希望这个对你有用
以上是关于将数据从Activity发送到Fragment - 如何?的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 Kotlin 和 onActivityResult 将数据从 Fragment 发送到 Activity
menuItemclick上从Activity(Activity->Fragment->Fragment)向Fragment的Fragment发送数据