在父级或祖先上下文中找不到Onclick方法

时间:2016-08-25 08:47:58

标签: java android buttonclick appcompat-v7-r22.1

我收到一个非常简单的错误。我已经创建了一个测试按钮和一个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属性   带有id&#39;按钮&#39;

的android.support.v7.widget.AppCompatButton

3 个答案:

答案 0 :(得分:0)

你不应该在按钮setContentView(R.layout.activity_start);内召唤onClick()。你必须调用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 }
    

答案 1 :(得分:0)

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

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

当我反复发生此问题时,我注意到这是由于Google云端硬盘触发了“文件锁定”,正在复制我的文件。临时禁用功能解决了我所有的问题。

答案 2 :(得分:0)

您可能正在其他活动中调用setContentView方法。此方法使布局膨胀。

如果在布局所属的活动之外调用该按钮,则不会找到该按钮。将活动初始化为另一个活动的最常见方法是故意。

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

然后,在您的活动中调用setContentView(R.layout.your_activity_layout)来增加布局。如果执行此操作,则可以正常从活动内部调用xml文件中引用的onClick(View view)