保护与不保护之间的区别

大家好,我有Android的Kotlin这个代码,但我不知道为什么它不工作。 这是我的代码:

package com.test.tictac import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.Button import android.widget.Toast class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } protected fun buClick(view: View) { val buSelected = view as Button var cellID = 0 when(buSelected.id) { R.id.bu1->cellID = 1 R.id.bu2->cellID = 2 R.id.bu3->cellID = 3 R.id.bu4->cellID = 4 R.id.bu5->cellID = 5 R.id.bu6->cellID = 6 R.id.bu7->cellID = 7 R.id.bu8->cellID = 8 R.id.bu9->cellID = 9 } Toast.makeText(this,"ID:"+ cellID, Toast.LENGTH_LONG).show() } } 

我尝试了很多东西,并根据我当我删除保护功能buClick它的工作原理,但有没有办法让protected可行? 非常感谢你!

PS:这是xml:

 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:gravity="center" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.test.tictac.MainActivity"> <TableRow android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/bu1" android:layout_width="40pt" android:layout_height="40pt" android:layout_marginRight="3pt" android:onClick="buClick" /> <Button android:id="@+id/bu2" android:layout_width="40pt" android:layout_height="40pt" android:layout_marginRight="3pt" android:onClick="buClick" /> <Button android:id="@+id/bu3" android:layout_width="40pt" android:layout_height="40pt" android:layout_marginRight="3pt" android:onClick="buClick" /> </TableRow> <TableRow android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/bu4" android:layout_width="40pt" android:layout_height="40pt" android:layout_marginRight="3pt" android:onClick="buClick" /> <Button android:id="@+id/bu5" android:layout_width="40pt" android:layout_height="40pt" android:layout_marginRight="3pt" android:onClick="buClick" /> <Button android:id="@+id/bu6" android:layout_width="40pt" android:layout_height="40pt" android:layout_marginRight="3pt" android:onClick="buClick" /> </TableRow> <TableRow android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/bu7" android:layout_width="40pt" android:layout_height="40pt" android:layout_marginRight="3pt" android:onClick="buClick" /> <Button android:id="@+id/bu8" android:layout_width="40pt" android:layout_height="40pt" android:layout_marginRight="3pt" android:onClick="buClick" /> <Button android:id="@+id/bu9" android:layout_width="40pt" android:layout_height="40pt" android:layout_marginRight="3pt" android:onClick="buClick" /> </TableRow> </TableLayout> 

android:onClick将方法名称作为值。

该名称必须对应于一个公共方法,该方法只需要一个View类型的参数。

添加protected的方法降低了框架所要求的public可见性。

它与访问修饰符有关。 受保护的方法只能由子类(扩展方法所在的类的类)或其他类在同一个包中看到。 正如@tynn所提到的,android:onClick需要调用的方法是公开的,否则将无法使用它。 我建议你阅读更多访问修饰符,以及何时使用它们。