EditText-Field가 있고 OnFocusChangeListener를 설정했습니다. 포커스를 잃으면 데이터베이스에있는 EditText의 값을 확인하는 메소드가 호출됩니다. 메서드의 반환 값이 true이면 토스트가 표시되고 EditText에서 포커스가 다시 나타납니다. 포커스는 항상 EditText에 다시 나타나고 메서드의 반환 값이 false가 될 때까지 키보드가 표시되어야합니다.
편집 : 내 실제 문제를 아직 완전히 명확하게하지 않았다고 생각합니다 : EditText의 값이 값으로 편집 될 때까지 화면의 다른 항목을 편집 할 수 없어야합니다. "거짓을 반환합니다. 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를 클릭하고 이미 데이터베이스에있는 String을 넣습니다. 토스트가 보이고있다. 이제 더 이상 문자열을 편집 할 수 없습니다. 키보드에서 "다음"을 클릭하면 첫 번째 EditText에 포커스가 유지됩니다. 내 문자열을 편집하려고 시도했지만 아무 일도 일어나지 않습니다. 대신 내 새 문자열이 두 번째 EditText에 표시됩니다. 장치의 뒷면 화살표를 클릭하고 첫 번째와 두 번째 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();
}
}
}