Bir EditText-alanı var ve bunun için bir OnFocusChangeListener ayarlayın. Odağı kaybettiğinde, EditText'in değerini veritabanındaki bir değerle kontrol eden bir yöntem çağrılır. Yöntemin dönüş değeri true olursa, bir tost gösterilir ve odağın EditText'e tekrar dönmesi gerekir. Odak her zaman EditText'e dönmeli ve yöntemin dönüş değeri yanlış olana kadar klavye gösterilmelidir.
DÜZENLEME: Sanırım, gerçek sorunumu henüz tam olarak açıklığa kavuşturmadım: Ekrandaki başka hiçbir Öğe, EditText değerinin "checkLiganame (liganame) yöntemini yapan bir değere düzenlenene kadar düzenleme yapamamalıdır. msgstr "yanlış döndür. Yalnızca EditText-Alanı düzenlenebilir olmalıdır.
İşte benim kod (benim için çalışmıyor):
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();
}
}
ve yöntem:
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;
}
Bu kod aşağıdaki sonuca yol açar: EditText odak kaybettikten sonra, odak EditText için geri atlar, ancak artık metin düzenleyemiyorum.
EDIT2: Kodumu değiştirdi. Senaryo:
İlk EditText tıklayın ve zaten veritabanında olan bir String koymak. Tost gösteriyor. Artık String'imi düzenleyemiyorum. Klavyede "ileri" yi tıklıyorum ve odak ilk EditText'te kalıyor. Dize düzenlemeye çalışıyorum, ama hiçbir şey olmuyor. Bunun yerine yeni String'im ikinci EditText'te gösteriliyor. Cihazımın geri okunu tıklıyorum ve birinci ve ikinci EditText'i tıklıyorum -> klavye gösterilmiyor.
İşte benim yeni Kod:
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();
}
}
}