如何在自定义视图的xml中设置android:onClick?

时间:2016-02-21 06:25:25

标签: android onclick onclicklistener android-custom-view buttonclick

我看到了这个SO question,并希望为自定义视图实现已接受的答案。

因为在我的自定义视图的xml中,它无法识别android:onClick任何按钮的任何方法!我想知道是不是因为自定义视图,也许我应该在活动的xml中使用onClick方法。

是否可以在用户定义的自定义视图(扩展LinearLayout)中为按钮android:onClick属性设置方法,如下所示:

这是我的自定义视图:

public class CustomEditText extends LinearLayout{
...
    public void myMethod(View v) {

        switch (v.getId()) {
        case R.id.btn_down:
            // do stuff;
            break;
        case R.id.btn_down_double:
            // do stuff;
            break;
        }
    }

}

它是我的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_weight="wrap_content"
        android:background="@drawable/bg_ctrl"
        android:orientation="vertical">

        <android.support.v7.widget.AppCompatButton
            android:id="@+id/btn_down"
            style="@style/CustomButton"
            android:onClick="myMethod"
            android:theme="@style/CustomButton.RED" />

        <android.support.v7.widget.AppCompatButton
            android:id="@+id/btn_down_double"
            style="@style/CustomButton"
            android:onClick="myMethod"
            android:theme="@style/CustomButton.RED2" />

    </LinearLayout>

</LinearLayout>

这是错误:

FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not find method myMethod(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'btn_down'

更新

此自定义视图的父级是一个片段,我将myMethod()移动到该片段,但错误仍然存​​在: - |

2 个答案:

答案 0 :(得分:1)

这必须在您的活动类代码中:

    public void myMethod(View v) {

        switch (v.getId()) {
          case R.id.btn_down:
            // do stuff;
            break;
          case R.id.btn_down_double:
            // do stuff;
            break;
        }
    }

答案 1 :(得分:0)

就像接受的答案和@ ROHIT的答案一样,无法在片段/自定义视图(.jar文件)中定义myMethod()以在任何.xml文件中使用...

所以要在myMethod()中致电android:onClick="myMethod"myMethod的定义应首先是public,其次应该是活动!

虽然在我的情况下,它不是解决方案,因为我想在myMethod()中使用CustomEditText.jar来轻松访问局部变量(特别是在我为不同的自定义视图复制的情况下)用途)。