【问题标题】:Fragments and Activities using Kotlin使用 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 从片段中访问它时,它没有出现
  • 你试过公开吗?

标签: android android-fragments kotlin


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多