點擊登錄按鈕 (android:onClick="click") 後 App 停止運行 (Crash)。
XML 佈局中的 android:onClick="click" 要求點擊處理方法定義在**加載該佈局的 Activity** 中。
three.xml 由 MainActivity 加載 (setContentView(R.layout.three))。click(View v) 方法卻定義在 GUidt 類中 (或未定義在 MainActivity)。MainActivity 中找不到 click 方法 → 拋出 IllegalStateException: Could not find method click(View) → Crash。// MainActivity.java (加載 three.xml 的 Activity)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.three); // 加載登錄佈局
}
// 關鍵:onClick 方法必須在這裡!
public void click(View v) {
Intent intent = new Intent(this, Activity01.class);
startActivity(intent);
}
}
<application ...>
<activity android:name="com.gfxy.znny.MainActivity">
<!-- 若 MainActivity 是入口,需加 intent-filter -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.gfxy.znny.GUidt" /> <!-- 另一個 Activity -->
<activity android:name="com.gfxy.znny.Activity01" /> <!-- 登錄後跳轉目標 -->
</application>
注意: 原清單文件中 GUidt 有 LAUNCHER intent-filter,而 MainActivity 沒有。若 MainActivity 是登錄頁入口,**必須將 intent-filter 移至 MainActivity**。
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_marginRight="60dp"
android:onClick="click" <!-- 系統會在 MainActivity 中查找 click(View) -->
android:text="登錄"
android:textColor="#000080" />
// MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.three);
Button btnLogin = findViewById(R.id.button4);
btnLogin.setOnClickListener(v -> {
startActivity(new Intent(this, Activity01.class));
});
}
優點: 編譯期檢查方法存在性、支持 Lambda、便於單元測試、避免反射性能損耗、重構時 IDE 自動更新引用。
Crash 根因:android:onClick 方法定義在錯誤的 Activity (GUidt) 而非加載佈局的 Activity (MainActivity)。 修復:將 click(View) 移至 MainActivity,並確保 Manifest 入口配置正確。**強烈建議改用代碼 setOnClickListener 替代 XML onClick 屬性。**