设置EditText的焦点

8 浏览
0 Comments

设置EditText的焦点

我有一个EditText字段,并为其设置了一个OnFocusChangeListener。当它失去焦点时,会调用一个方法来检查EditText中的值与数据库中的值是否相同。如果方法的返回值为true,则显示一个toast,并且焦点应该再次回到EditText上。只有当方法的返回值为false时,焦点才应该回到EditText上,并且键盘应该显示出来。\n编辑:我认为我还没有完全清楚地表达我的真正问题:在EditText的值被编辑为使方法“checkLiganame(liganame)”返回false的值之前,屏幕上的其他项目都不能被编辑。只有EditText字段可编辑。\n以下是我的代码(对我来说无效):\n

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,
                        “此联赛名称已被使用”,
                        Toast.LENGTH_SHORT);
                toast.show();
                Liganame.requestFocus();
            }
        }
    }

\n和方法:\n

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;
}

\n这段代码导致以下结果:EditText失去焦点后,焦点跳回EditText,但我无法再编辑文本。\n编辑2:更改了我的代码。场景:\n我点击第一个EditText并在其中输入一个已经存在于数据库中的字符串。toast显示。现在我无法再编辑我的字符串。我点击键盘上的“下一个”按钮,焦点仍停留在第一个EditText上。我尝试编辑我的字符串,但没有任何反应。而是在第二个EditText中显示我的新字符串。我点击设备的返回箭头,然后重新点击第一个和第二个EditText --> 键盘不再显示。\n以下是我的新代码:\n

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();
        }
    }
}

0
0 Comments

问题:Set Focus on EditText的原因及解决方法

原因:Darwind代码无法显示键盘。

解决方法:

以下代码对我有效:

_searchText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(_searchText, InputMethodManager.SHOW_IMPLICIT);

如果键盘没有显示,尝试强制显示:

imm.showSoftInput(_searchText, InputMethodManager.SHOW_FORCED);

以上是解决Set Focus on EditText问题的方法。

0
0 Comments

问题:Set Focus on EditText

原因:请求焦点不足以显示键盘。需要在获取焦点的同时显示键盘,可以使用以下代码实现:

if(myEditText.requestFocus()) {
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}

解决方法:在checkLiganame方法中,检查光标是否为空。光标总是会返回一个对象,所以对空值的检查没有任何作用。然而,问题出在

db.close();

这行代码上。当关闭数据库连接时,光标会变得无效,很可能为空。因此,在获取值后关闭数据库。不要检查光标是否为空,而是检查返回的行数是否大于0,如

if(cursor.getCount() > 0)

,如果是,则设置boolean变量为true。

代码示例:

public class MainActivity extends Activity implements OnFocusChangeListener {
    private EditText editText1, editText2;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText1 = (EditText) findViewById(R.id.editText1);
        editText1.setOnFocusChangeListener(this);
        editText2 = (EditText) findViewById(R.id.editText2);
        editText2.setOnFocusChangeListener(this);
    }
    public void onFocusChange(View v, boolean hasFocus) {
        String liganame = editText1.getText().toString();
        if(liganame.length() == 0) {
            if(editText1.requestFocus()) {
                getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
                editText2.clearFocus();
                Toast.makeText(MainActivity.this, "Dieser Liganame ist bereits vergeben", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

注意:所有的EditText视图都应该将它们的onFocusChangeListener设置为相同的监听器,就像示例中所做的那样。

0
0 Comments

问题:为什么无法通过调用editText.requestFocus()来设置焦点到EditText上并打开虚拟键盘?如何解决这个问题?

解决方法:在调用editText.requestFocus()之后,添加以下代码可以解决问题:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

以上代码中,editText是指要设置焦点的EditText。

以下是原因和解决方法的英文翻译:

原因:直接调用editText.requestFocus()方法无法打开虚拟键盘。

解决方法:在调用editText.requestFocus()之后,添加以下代码可以打开虚拟键盘:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

以上代码中,editText是指要设置焦点的EditText。

0