在其他类中定义onClick方法

时间:2014-01-02 18:11:15

标签: android onclicklistener android-xml

使用xml我可以定义一个onClick方法,如果我点击视图就会调用它:

android:onclick="onClick"
public void onClick(View v)

此方法必须在Activity类中定义,该类是可见的。现在我有许多使用不同onClick方法的控件。这使得Activity类非常混乱,那么有没有办法在另一个类中定义这个方法?

当然我可以在类本身中使用不同的类或onClickListener但是使用xml它非常简单。使用onClickListeners会出现一些“未使用的代码”,因为Java目前没有lamda表达式,这也让人感到困惑。我认为xml是一种快速而清晰的方法,但如果你现在有这么多方法,那就不行了。

4 个答案:

答案 0 :(得分:2)

查看源代码看起来它必须是扩展用于创建View的Context类的类中的方法:

http://androidxref.com/4.4_r1/xref/frameworks/base/core/java/android/view/View.java#3780

请看这一行:

getContext().getClass().getMethod( ... )

正在对getContext()

进行反射

您可以像其他答案建议一样,打开视图ID,并在其他类中调用函数。或者,如果您的应用程序很复杂,可能会将您的布局划分为片段?

答案 1 :(得分:0)

我不完全确定你想要什么,但你可以使用不同的方法名称,它不一定是“onClick”

除此之外,我相信他们确实必须参加那项活动。

答案 2 :(得分:0)

在托管该布局的Activity上调用XML中定义的任何onClick方法。如果你真的想这样做,你可以将所有传入的点击转发到另一个类,但最好的方法是OnClickListener或为每个按钮使用不同的onClick方法名称。

答案 3 :(得分:0)

make activity implement onclick listener and implement the method like below.

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    int key  = v.getId();
    switch (key) {
    case R.id.message_field:
            // handle click

        break;

    default:
        break;
    }
}