使用Kotlin的片段和活动

我有以下两个整数的活动

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为true时,我想从片段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,但它不工作。 我怎样才能从一个片段访问活动常量。

你会创建一个接口,让我们说你的活动FragmentListener包含一个像fun updateClubs(count: Int)的函数。 你的活动应该实现这个接口。 然后,在你的Fragment中,添加一个fragmentListener属性并覆盖onAttach(context:Context):

 private var fragmentListener: FragmentListener? = null override fun onAttach(context: Context) { this.listener = context as? FragmentListener } 

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

从任何地方访问活动中包含的原始值并不是一个好主意。 您必须首先设计好您想要管理数据的位置和方式。 要简单地回答你的问题,在Fragment类中调用((YourActivityName)getActivity()).someMethod()来告诉你的活动处理数据。