2014-12-02 55 views
0

所以大約45分鐘,我努力理解爲什麼我的活動的方法是不可達即使我宣佈它在活動的佈局XML像這樣:爲什麼onClick佈局XML引用的方法需要公開?

<TextView 
    android:id="@+id/lnk_reset_password" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:onClick="resetPassword" android:clickable="true" 
    android:text="Reset Password" /> 

我的活動的方法簽名:

private void resetPassword (View v) { 
    //logic 
} 

我知道,只要我得到錯誤,我只需要將訪問修改器更改爲「公共」,但我不明白爲什麼。佈局XML是否在我的活動範圍之外編譯?

感謝,

+2

我認爲這是因爲'onClick'方法是從你的課堂外調用的,然後它必須是公共的。 – 2014-12-02 21:41:26

回答

2

穆罕默德是正確的。私有方法只能從同一個類或同一類的內部類中調用。但是,它是調用您的resetPassword方法的Android框架,因此它必須公開。

+0

生成的「R」類調用我的公共方法嗎? – PeonProgrammer 2014-12-02 21:51:13

+1

不,R類只是一個地方,用於存儲資源編譯器處理所有資源XML文件時生成的所有ID。如果您在resetPassword方法中設置了斷點,則可以查看調用堆棧。當你點擊它時,你的視圖正在處理觸摸事件,並根據點擊的時間和位置決定它是一次點擊,然後它調用你指定的方法。所以它可能是View類本身,或者是它的內部類。 – Bruce 2014-12-02 21:54:11

+0

如果您覺得這樣做的動機,您應該從SDK管理器下載源代碼,並查看點擊視圖時發生的所有代碼。這很酷 - 有定時器開始驗證它是一個水龍頭,而不是一個長按等。 – Bruce 2014-12-02 21:55:47

-1

因爲另一個類需要能夠調用它。

相關問題