如何在自定义视图的 xml 中设置 android:onClick?
How to set android:onClick in xml of a custom view?
我看到了这个 SO question,并想为自定义视图实施已接受的答案。
因为在我的自定义视图的 xml 中,它无法识别任何按钮的 android:onClick
方法!我想知道是否是因为自定义视图,也许我应该在 activity.
的 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()
移动到那个片段,但错误仍然存在:-|
这必须在您的 activity class 代码中:
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;
}
}
请在活动class中定义'myMethod()'。
如果你想在片段中添加它,那么你必须在按钮的 onClickListener 中定义它,如果你想在多个按钮上调用该方法,那么你可以创建一个私有方法并从多个 onClickLisetner 调用它。
有关 onClick xml 方法和 onClickListener 的更多信息:
How exactly does the android:onClick XML attribute differ from setOnClickListener?
就像接受的答案和@ROHIT 的答案一样,无法在 fragment/custom 视图(.jar 文件)中定义 myMethod()
以在任何 .xml 文件中使用。 .
所以要在android:onClick="myMethod"
中调用myMethod()
,myMethod
的定义应该首先是public
,其次是Activity!
尽管在我的情况下,这不是解决方案,因为我想在 CustomEditText.jar
中使用 myMethod()
来轻松访问局部变量(尤其是在我复制该自定义视图的情况下用于不同的用途)。
我看到了这个 SO question,并想为自定义视图实施已接受的答案。
因为在我的自定义视图的 xml 中,它无法识别任何按钮的 android:onClick
方法!我想知道是否是因为自定义视图,也许我应该在 activity.
是否可以在用户定义的自定义视图(扩展 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()
移动到那个片段,但错误仍然存在:-|
这必须在您的 activity class 代码中:
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;
}
}
请在活动class中定义'myMethod()'。
如果你想在片段中添加它,那么你必须在按钮的 onClickListener 中定义它,如果你想在多个按钮上调用该方法,那么你可以创建一个私有方法并从多个 onClickLisetner 调用它。
有关 onClick xml 方法和 onClickListener 的更多信息:
How exactly does the android:onClick XML attribute differ from setOnClickListener?
就像接受的答案和@ROHIT 的答案一样,无法在 fragment/custom 视图(.jar 文件)中定义 myMethod()
以在任何 .xml 文件中使用。 .
所以要在android:onClick="myMethod"
中调用myMethod()
,myMethod
的定义应该首先是public
,其次是Activity!
尽管在我的情况下,这不是解决方案,因为我想在 CustomEditText.jar
中使用 myMethod()
来轻松访问局部变量(尤其是在我复制该自定义视图的情况下用于不同的用途)。