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

问题描述 投票:0回答:3

我得到一个非常简单的错误。我已经创建了一个测试按钮和一个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)for android:onClick属性在视图类android.support.v7.widget.AppCompatButton上定义,ID为“button”

java android buttonclick appcompat-v7-r22.1
3个回答
0
投票

你不应该在setContentView(R.layout.activity_start); mentod里面调用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 }

0
投票

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

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

当我反复出现这个问题时,我注意到这是由于Google Drive触发的“文件锁定”,它正在复制我的文件。临时禁用解决了我的所有问题。


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.