如何解决错误:无法在父级或祖先的上下文中查找onClick(View)方法:android:onClick

时间:2016-05-10 10:59:52

标签: java android xml

我已经看到有一些类似的问题,但到目前为止,这些答案对我没有帮助。完整错误:

  

java.lang.IllegalStateException:找不到方法onClick(查看)   在父或祖先的上下文中为android:onClick属性定义   在具有id的视图类android.support.v7.widget.AppCompatButton上   'button_random'

班级( StartActivity.java ):

public class StartActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);
    }

    public void onClick(View v) {
        Log.d("DEBUG", "CLICKED " + v.getId());
    }

}

XML( activity_start.xml ):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Random Game"
        android:id="@+id/button_random"
        android:layout_gravity="center_horizontal"
        android:onClick="onClick" />
</LinearLayout>

我已将活动添加到AndroidManifest.xml。我有类似的活动,以同样的方式工作,我没有任何问题......

有人看到我遗失某些东西或犯了错误的东西吗?

5 个答案:

答案 0 :(得分:3)

请将onClick方法重命名为其他方法,Android认为您正在通过onClick接口公开的View.java调用内部OnClickListener

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Random Game"
    android:id="@+id/button_random"
    android:layout_gravity="center_horizontal"
    android:onClick="myOnClick" />

以及您的活动

public class StartActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_start);
        }

        public void myOnClick(View v) {
          Log.d("DEBUG", "CLICKED " + v.getId());
        }
}

您可以查看View文档here

答案 1 :(得分:2)

我遇到了同样的问题,在我的情况下,我将XML中的android.support.v7.widget.AppCompatButton更改为 <Button .... /> 并且它有效。

错误代码:

 <android.support.v7.widget.AppCompatButton
        .... />

固定代码:

{{1}}

答案 2 :(得分:1)

就我而言,我错过了结尾处的右括号。

android:onClick =“ @ {(v)-> CommentHandler.selectGallery(v)”“。

It should be like this.
        android:onClick="@{(v) -> CommentHandler.selectGallery(v)}".

答案 3 :(得分:0)

您需要更改android.support.v7.widget.AppCompatButton

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.AppCompatButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Random Game"
        android:id="@+id/button_random"
        android:layout_gravity="center_horizontal"
        android:onClick="onClick" />
</LinearLayout>

答案 4 :(得分:0)

我遇到了同样的问题,就我而言,我有2个活动使用相同的布局,因此当我更改OnClick事件名称时,它将在其他活动中崩溃,请尝试检查setContentView布局活动崩溃