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

Pet*_*ter 6 java xml android

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

java.lang.IllegalStateException:无法在父级或祖先中找到方法onClick(View)用于android的onClick属性:在视图类android.support.v7.widget.AppCompatButton上定义的id为'button_random'的onClick属性

该类(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());
    }

}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

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

Shr*_*hat 7

就我而言,我最后错过了右括号。

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

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

  • 布洛,你救了我的命 (2认同)

kgu*_*ula 6

请重新命名onClick方法比其他任何事情,Android的认为你是在调用内部onClickView.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" />
Run Code Online (Sandbox Code Playgroud)

并在您的活动中

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());
        }
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看查看文档


Ale*_*lig 3

我遇到了同样的问题,就我而言,我将ButtonXML 更改为android.support.v7.widget.AppCompatButton并且它有效。

有错误的代码:

 <Button
        .... />
Run Code Online (Sandbox Code Playgroud)

固定代码:

 <android.support.v7.widget.AppCompatButton
        .... />
Run Code Online (Sandbox Code Playgroud)