ฉันมี EditText-Field และตั้ง OnFocusChangeListener สำหรับมัน เมื่อสูญเสียโฟกัสวิธีการที่เรียกว่าซึ่งตรวจสอบค่าของ EditText กับหนึ่งในฐานข้อมูล หากคืนค่าของวิธีการเป็นจริงขนมปังปิ้งจะปรากฏขึ้นและโฟกัสควรกลับไปที่ EditText อีกครั้ง โฟกัสควรกลับไปที่ EditText เสมอและแป้นพิมพ์ควรแสดงจนกระทั่งค่าส่งคืนของวิธีนั้นเป็นเท็จ
แก้ไข: ฉันคิดว่าฉันยังไม่ได้ทำให้ปัญหาที่แท้จริงของฉันชัดเจนอย่างสมบูรณ์ยัง: ไม่มีรายการอื่น ๆ บนหน้าจอควรจะสามารถแก้ไขได้จนกว่าค่าของ EditText จะถูกแก้ไขเป็นค่าซึ่งทำให้วิธีการ "checkLiganame (liganame) "คืนค่าเท็จ เฉพาะ EditText-Field เท่านั้นที่สามารถแก้ไขได้
นี่คือรหัสของฉัน (ซึ่งใช้งานไม่ได้สำหรับฉัน):
final EditText Liganame = (EditText) findViewById(R.id.liganame);
Liganame.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
String liganame = Liganame.getText().toString();
if (checkLiganame(liganame)) {
Toast toast = Toast.makeText(CreateTableActivity.this,
"Dieser Liganame ist bereits vergeben",
Toast.LENGTH_SHORT);
toast.show();
Liganame.requestFocus();
}
}
และวิธีการ:
public boolean checkLiganame(String liganame) {
boolean found = false;
DatabaseHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getReadableDatabase();
Cursor cursor = db.query("liga", new String[] { "liganame" },
"liganame = '" + liganame + "'", null, null, null, null);
Log.i("Liganame: ", String.valueOf(cursor));
db.close();
if (cursor != null) {
found = true;
}
return found;
}
รหัสนี้นำไปสู่ผลลัพธ์ต่อไปนี้: หลังจาก EditText โฟกัสหายไปโฟกัสจะกลับไปที่ EditText แต่ฉันไม่สามารถแก้ไขข้อความได้อีก
EDIT2: เปลี่ยนรหัสของฉัน สถานการณ์:
ฉันคลิกที่ EditText แรกแล้วใส่สตริงเข้าไปซึ่งมีอยู่ในฐานข้อมูลแล้ว ขนมปังปิ้งกำลังแสดง ตอนนี้ฉันไม่สามารถแก้ไขสตริงของฉันได้อีกต่อไป ฉันคลิก "ถัดไป" บนแป้นพิมพ์และโฟกัสจะอยู่ที่ EditText แรก ฉันพยายามแก้ไข String แต่ไม่มีอะไรเกิดขึ้น สตริงใหม่ของฉันแสดงใน EditText ที่สองแทน ฉันคลิกที่ลูกศรย้อนกลับของอุปกรณ์ของฉันและ reclick ที่ EditText แรกและครั้งที่สอง -> ไม่มีคีย์บอร์ดปรากฏขึ้น
นี่คือรหัสใหม่ของฉัน:
public class CreateTableActivity extends Activity implements
OnFocusChangeListener {
private EditText Liganame, Mannschaftsanzahl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create_league);
Liganame = (EditText) findViewById(R.id.liganame);
Liganame.setOnFocusChangeListener(this);
Mannschaftsanzahl = (EditText) findViewById(R.id.mannschaftsanzahl);
Mannschaftsanzahl.setOnFocusChangeListener(this);
final Button save_button = (Button) findViewById(R.id.create_tabelle_speichern_button);
OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
ButtonClick();
}
};
save_button.setOnClickListener(mCorkyListener);
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
String liganame = Liganame.getText().toString();
if (checkLiganame(liganame)) {
if (Liganame.requestFocus()) {
getWindow()
.setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Mannschaftsanzahl.clearFocus();
Toast.makeText(CreateTableActivity.this,
"Dieser Liganame ist bereits vergeben",
Toast.LENGTH_SHORT).show();
}
}
}