使用 Kotlin 的片段和活动

Posted

技术标签:

【中文标题】使用 Kotlin 的片段和活动【英文标题】:Fragments and Activities using Kotlin 【发布时间】:2018-06-26 18:07:58 【问题描述】:

我有以下两个整数的活动

class ComplexActivity : AppCompatActivity() 

    var clubs : Int = 0
    var diamonds : Int = 0

override fun onCreate(savedInstanceState: Bundle?) 
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_complex)

    val fragment = ClubsFragment()
    val transaction = supportFragmentManager.beginTransaction()
    transaction.replace(R.id.main_frame, fragment)
    transaction.commit()

    

当isScored 为真时,我想从片段ClubsFragment 更改整数俱乐部的值

class ClubsFragment : Fragment(),  SeekBar.OnSeekBarChangeListener

private var isScored = false



override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? 
    // Inflate the layout for this fragment

    val v = inflater!!.inflate(R.layout.fragment_clubs, container, false)

    v.image_clubs.setOnClickListener 

        if(isScored)
           activity.clubs = 4
        
    
  

我尝试使用 activity.clubs,但它不起作用。如何从片段中访问活动常量。

【问题讨论】:

用伴生对象试试 @MeLine 没有区别 copanioin object var clubs = 0 相当于java中的static @MeLine 但是当我尝试使用 activity.clubs 从片段中访问它时,它没有出现 你试过公开吗? 【参考方案1】:

您将创建一个接口,假设为您的 Activity 的FragmentListener,其中包含类似fun updateClubs(count: Int) 的函数。你的 Activity 应该实现这个接口。 然后,在您的 Fragment 中,添加一个 fragmentListener 属性并覆盖 onAttach(context: Context):

private var fragmentListener: FragmentListener? = null

override fun onAttach(context: Context) 
    this.listener = context as? FragmentListener

然后,在您的 OnClickListener 中,您可以简单地调用 fragmentListener?.updateClubs(4)

【讨论】:

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

Kotlin:在片段内打开新活动

使用地图片段(kotlin)时,活动在充气时崩溃

如何重新附加片段(片段未附加到活动 Kotlin)

将接口从片段传递到kotlin中的活动

Kotlin:片段内的按钮需要在开始活动之前单击两次。如何一键启动活动?

在 android studio kotlin 中将数据从活动传递到片段(不重复,这些方法不起作用)