带有片段的 Kotlin

Posted

技术标签:

【中文标题】带有片段的 Kotlin【英文标题】:Kotlin with Fragments 【发布时间】:2018-01-04 06:07:38 【问题描述】:
    var bundle : Bundle ? =null

    bundle?.putString("text",text)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
        frag = Fragment.instantiate(context,Fragment2::class.java.name) as Fragment2
    

    frag?.arguments=bundle

    fragmentManager.beginTransaction().replace(R.id.contentPanel1,frag).commit()

我已经在 fragment1 上编写了这些代码并将数据传递给它

在 Fragment 2 上,我收到了作为 null 的捆绑包,任何人都可以解决它

var bundle : Bundle ?
bundle = arguments

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
    Toast.makeText(context,bundle.toString(),Toast.LENGTH_LONG).show()

【问题讨论】:

在 fragment1 中,您实际上在哪里将 bundle 设置为 null 以外的任何值? 【参考方案1】:

问题是你没有初始化bundle的var。看下面。

val bundle = Bundle()

bundle.putString("text",text)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
    frag = Fragment.instantiate(context,Fragment2::class.java.name) as Fragment2


frag?.arguments=bundle

fragmentManager.beginTransaction().replace(R.id.contentPanel1,frag).commit()

【讨论】:

【参考方案2】:

请遵循以下代码

 /**
 * Use this factory method to create a new instance of
 * this fragment using the provided parameters.
 *
 * @return A new instance of fragment ProfileFragment.
 */
// TODO: Rename and change types and number of parameters
@JvmStatic
fun newInstance(bundle: Bundle) = ProfileFragment().apply  arguments 
= bundle 


startFragment(ProfileFragment.newInstance(Bundle()))

【讨论】:

以上是关于带有片段的 Kotlin的主要内容,如果未能解决你的问题,请参考以下文章

Kotlinkotlin中的小技巧

Kotlinkotlin中的空指针检查

KotlinKotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )

KotlinKotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )

KotlinKotlin 常用表达式 ( range 范围表达式 | when 条件表达式 | 字符串模板 )

KotlinKotlin 与 Java 互操作 ② ( @JvmField 注解字段给 Java | @JvmOverloads 注解修饰函数 | @JvmStatic 注解声明静态成员 )