IllegalStateException:在父或祖先上下文类 android.support.v7.widget.AppCompatButton 中找不到方法 insert(View)

Posted

技术标签:

【中文标题】IllegalStateException:在父或祖先上下文类 android.support.v7.widget.AppCompatButton 中找不到方法 insert(View)【英文标题】:IllegalStateException: Could not find method insert(View) in a parent or ancestor Context class android.support.v7.widget.AppCompatButton 【发布时间】:2016-06-09 01:57:20 【问题描述】:

我已经在单个项目中启动了该程序,它可以正常工作。

但是,当我复制并粘贴到一个更大的项目中时,它会在 logcat 中出现以下错误。

 FATAL EXCEPTION: main Process: com.example.alan.mainactivity, PID: 11545 java.lang.IllegalStateException: Could not find method insert(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'button' at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:307) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:266)
  at android.view.View.performClick(View.java:5198)
  at android.view.View$PerformClick.run(View.java:21147)
 at android.os.Handler.handleCallback(Handler.java:739)
 at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:148)
 at android.app.ActivityThread.main(ActivityThread.java:5417)
 at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

【问题讨论】:

能否分享一下activity_main.xml 是的,我认为问题是我无法通过 Main3Activity.java 从 second_layout.xml 读取任何文本 我还找不到。基本上,发生此错误是因为您在一个 layout.xml 中设置了 onClick="insert"。然后,您在某些没有声明方法 insert 的活动中使用此布局...在 Main3Activity 中,此方法就在那里.. . 不确定其他地方 【参考方案1】:

我发现了错误。

在布局second_layout.xml 中,您将Button 定义为android:onClick="insert"

此布局包含在activity_user_profile.xml

activity_user_profile.xml 用于Main2Activity.java

所以,这就是问题所在:

Main2Activity.java 中使用了“插入按钮”。但是,该类没有任何方法public void insert(View view)

因此,将其添加到您的 Main2Activity.java

public void insert(View view)
    // Add the code that you want
    // Or do nothing if you want

记住

如果您在布局文件 (xml) 中设置任何 onClick 事件,则必须在将使用该布局的父 Activity 中创建方法。

【讨论】:

亲爱的@Guilherme 我在 Main2Activity 中添加了以下代码。但是它不起作用 public void insert(View view) and insertToDatabase(name,add);被插入到 Main2Activity.java 您是否在任何其他活动中使用 second_layout.xml 或 activity_user_profile.xml? 不只是在 MainActivity.java 中使用了 activity.xml。 Main2Activity 正在使用 activity_user_profile.xml。并且 Main3Activity 正在使用 second_layout.xml @CoDe 如果在 XML 中设置了 android:onclick 属性,则必须在父 Activity 中实现该方法。如果要在 Fragment 内部实现该方法,则应设置点击监听器(setOnClickListener( new View.OnClickListener()) 而不是通过 XML 设置。【参考方案2】:

我遇到了同样的问题。问题是我在我的 xml 布局中从 onClick 调用了一个公共方法。在那个公共方法中,我在同一个类中调用了另一个私有方法。

我将课程从私有更改为公共,并且成功了。

XML 布局:

<Button
                android:layout_
                android:layout_
                android:onClick="increment"
                android:text="+" />

类:

public void increment(View view)
    quantity = quantity + 1;
    display(quantity);


private void display(int number) 
    TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view);
    quantityTextView.setText("" + number);

我将显示方法从私有更改为公共,并且它起作用了。

【讨论】:

以上是关于IllegalStateException:在父或祖先上下文类 android.support.v7.widget.AppCompatButton 中找不到方法 insert(View)的主要内容,如果未能解决你的问题,请参考以下文章

Angular (v2) 扩展系列组件通信(无父或外部服务)

graphql 在嵌套查询的父或父参数上使用嵌套查询参数

如何从不是父或子的另一个组件更改功能组件的状态?

CSS 在没有父或子内容的情况下悬停时更改边框大小“跳跃”

Discord.js 我的机器人在 Heroku 上托管时找不到任何父或子频道

我如何从MainActivity的弹出登录到另一个活动