2017-06-18 83 views
0

大家好我在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> 
+0

'protected'修飾符意味着該方法對這個類及其子類可見。你的'MainActivity'類是final的(因爲Kotlin中的類默認是final),所以它不會有任何子類,在這裏使用'protected'沒有任何意義(即使它有效)。 – yole

回答

4

android:onClick的取方法名作爲值。

該名稱必須對應於一個公共方法,該方法只需要一個View類型的參數。

向該方法添加protected降低了框架所需的public的可見性。

2

它與訪問修飾符有關。受保護的方法只能由子類(擴展該方法所在的類的類)或同一個包中的其他類來看到。正如@tynn已經提到的那樣,android:onClick需要調用的方法是公開的,否則它將無法使用它。 我建議你多讀取訪問修飾符,以及何時使用它們。