EditText-Fieldがあり、OnFocusChangeListenerを設定しています。フォーカスを失うと、メソッドが呼び出され、データベース内のEditTextの値がチェックされます。メソッドの戻り値がtrueの場合、トーストが表示され、フォーカスはEditTextに再び戻るはずです。メソッドの戻り値がfalseになるまで、フォーカスは常にEditTextに戻り、キーボードが表示されます。
編集:私の本当の問題はまだ完全に明らかにしていないと思います:EditTextの値が値に編集されるまで、画面上の他のアイテムは編集できません。これにより、メソッド "checkLiganame(liganame) "falseを返します。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に留まります。文字列を編集しようとしましたが、何も起こりません。代わりに、新しい文字列が2番目のEditTextに表示されます。デバイスの戻る矢印をクリックして、最初と2番目の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();
}
}
}