java.lang.ClassCastException: android.widget.Button
at com.example.android_4_2.MainActivity$1.onClick(MainActivity.java:28)
Button bCall = (Button) findViewById(R.id.TelBtn);
bCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText telnum = (EditText) findViewById(R.id.TelBtn); // 錯誤:同一 ID 強轉 EditText
String telNum = telnum.getText().toString();
...
}
});
佈局 XML 中 R.id.TelBtn 對應的是 Button,但在 onClick 內再次 findViewById(R.id.TelBtn) 並強制轉型為 EditText,導致執行期 ClassCastException。
android:id="@+id/etPhoneNumber"。onCreate 中分別取得兩個元件:Button btnDial = (Button) findViewById(R.id.TelBtn);
EditText etPhone = (EditText) findViewById(R.id.etPhoneNumber);
btnDial.setOnClickListener(v -> {
String num = etPhone.getText().toString().trim();
if (PhoneNumberUtils.isGlobalPhoneNumber(num)) {
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + num)));
} else {
Toast.makeText(this, "號碼格式錯誤", Toast.LENGTH_LONG).show();
}
});
View Binding 或 Data Binding 避免手動 findViewById 與型別轉換錯誤。btn_ 開頭對應 Button,et_ 開頭對應 EditText,tv_ 對應 TextView。