【问题标题】:Onclick method not found in parent or ancestor context在父或祖先上下文中找不到 Onclick 方法
【发布时间】:2017-01-01 14:42:08
【问题描述】:

我得到一个非常简单的错误。我创建了一个测试按钮和一个 onClick 方法来更改布局。我以一种简单的方式做到了,这样你就可以更好地理解我的问题。

这是我的按钮方法:

 public void accountButton (View v){
    setContentView(R.layout.activity_start);
}

这是我的按钮的 xml 文件:

 <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Test"
    android:id="@+id/button"
    android:layout_below="@+id/welcomeTxt"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="149dp"
    android:onClick="accountButton"
    android:nestedScrollingEnabled="true" />

单击按钮时出现以下错误:

java.lang.IllegalStateException:找不到方法 accountButton(View) 在父或祖先上下文中 android:onClick 属性定义在视图类上 android.support.v7.widget.AppCompatButton 与 id '按钮'

【问题讨论】:

  • 也发布您的活动代码。

标签: java android buttonclick android-appcompat


【解决方案1】:

您可能正在从另一个活动中调用您的 setContentView 方法。此方法使布局膨胀。

如果在布局所属的 Activity 之外调用它,则不会找到该按钮。启动另一个活动的最常见方式是通过意图。

Intent intent = new Intent(this, StartActivity.class);
startActivity(intent);

然后,在您的活动中,您调用setContentView(R.layout.your_activity_layout) 来扩充布局。如果你这样做,你可以从你的活动内部正常调用xml文件中引用的onClick(View view)

【讨论】:

  • 这句话的第一句话就是我所需要的。应该在类似问题的其他版本中可用
【解决方案2】:

对于那些在 Android Studio 或 Intellij IDE 中仍然存在问题的问题,这可能是您正在使用的类(或其前身)的缓存版本,没有被重新编译。

执行“使缓存无效/重新启动”,您的问题可能会消失。

当我反复出现此问题时,我注意到这是由于 Google 云端硬盘触发的“文件锁定”导致了我的文件的副本。临时禁用解决了我的所有问题。

【讨论】:

    【解决方案3】:

    你不应该在 buttononClick() mentod 中调用 setContentView(R.layout.activity_start);。你必须调用 setContentView(R.layout.activity_start);在oncreate() 方法内。

    按照步骤来实现它。

    1. 在你的课堂上实现OnClickListener
    2. 初始化onCreate()中的按钮

      Button button = (Button) findViewById(R.id.button);
      
    3. 按钮设置setOnClickListener()方法

      btn.setOnClickListener()
      
    4. 然后调用oncreate()之外的方法

       public void accountButton (View v){  //do some thing which you want }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      相关资源
      最近更新 更多