我得到一个非常简单的错误。我已经创建了一个测试按钮和一个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”
你不应该在setContentView(R.layout.activity_start);
mentod里面调用onClick()
。你必须调用setContentView(R.layout.activity_start);在oncreate()
方法内。
按照步骤来实现它。
OnClickListener
onCreate()
中的按钮
Button button = (Button) findViewById(R.id.button);
setOnClickListener()
方法
btn.setOnClickListener()
oncreate()
之外调用方法
public void accountButton (View v){ //do some thing which you want }
对于那些仍有问题的人,在Android Studio或Intellij IDE中,这可能是您正在使用的类(或其前身)的缓存版本,而不是正在重新编译。
执行“无效缓存/重启”,您的问题可能会消失。
当我反复出现这个问题时,我注意到这是由于Google Drive触发的“文件锁定”,它正在复制我的文件。临时禁用解决了我的所有问题。
你可能会从另一个活动中调用你的setContentView
方法。此方法会使布局膨胀。
如果在布局所属的活动之外调用它,则不会找到该按钮。从另一个开始激活活动的最常见方式是通过意图。
Intent intent = new Intent(this, StartActivity.class);
startActivity(intent);
然后,在您的活动中,您调用setContentView(R.layout.your_activity_layout)
来扩充布局。如果这样做,您可以通常从活动内部调用xml文件中引用的onClick(View view)
。