我有一个EditText-Field并为其设置了OnFocusChangeListener。当失去焦点时,将调用一个方法,该方法将在数据库中检查EditText的值。如果该方法的返回值是true,则显示一个敬酒,焦点应再次回到EditText上。焦点应该总是回到EditText上,并且键盘应该显示出来,直到该方法的返回值为false为止。
编辑:我想,我还没有完全弄清我真正的问题:屏幕上的其他任何项目都不能编辑,直到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并将一个String放入其中,该字符串已经在数据库中。烤面包正在显示。现在,我不能再编辑我的字符串了。我单击键盘上的“下一个”,焦点停留在第一个EditText上。我尝试编辑我的String,但是什么也没有发生。相反,我的新String显示在第二个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();
}
}
}