Android忘记密码页点击崩溃:找不到onClickForgot(View)方法
崩溃原因分析
从你提供的异常信息可以明确定位问题:
java.lang.IllegalStateException: Could not find method onClickForgot(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatTextView with id 'forgotpassword'
简单来说:你在某个布局文件(大概率是登录页面的布局,比如login.xml)里,给id为forgotpassword的TextView设置了android:onClick="onClickForgot"属性,但对应的Activity(比如LoginActivity)里没有定义这个符合要求的方法。
Android系统处理android:onClick属性时,会自动在当前Activity的上下文里寻找一个public修饰、参数为View、方法名完全匹配的方法,找不到就会抛出这个崩溃。
解决方案
你可以任选以下两种方式修复:
方案1:在对应Activity中补充缺失的方法
找到点击“忘记密码”文本所在的Activity(比如LoginActivity),添加如下代码:
public class LoginActivity extends AppCompatActivity { // ... 你的其他登录相关代码 // 必须满足:public修饰、参数为View、方法名和布局里的android:onClick值完全一致 public void onClickForgot(View view) { // 跳转到重置密码页面 Intent intent = new Intent(this, ResetPasswordActivity.class); startActivity(intent); } }
方案2:改用代码设置点击监听器(更推荐)
这种方式能在编译阶段就发现错误,避免运行时崩溃:
- 先移除布局文件中
forgotpassword控件的android:onClick="onClickForgot"属性; - 在对应Activity的
onCreate方法中添加点击逻辑:
public class LoginActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); // 假设你的登录布局是login.xml // ... 其他初始化代码 TextView forgotPasswordTv = findViewById(R.id.forgotpassword); forgotPasswordTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(LoginActivity.this, ResetPasswordActivity.class); startActivity(intent); } }); } }
额外说明
你提供的forgotpassword.xml代码不完整,但这不影响当前崩溃——因为崩溃是点击登录页面的“忘记密码”控件触发的,和重置密码页面的布局无关。
内容的提问来源于stack exchange,提问作者Jyothi Vineela

