2014-12-02 27 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

因为另一个类需要能够调用它。