将焦点设置的EditText(Set Focus on EditText)

2019-07-18 05:28发布

我有一个EditText场并设置OnFocusChangeListener它。 当它已失去焦点,一种方法被调用时,它检查的EditText与一种在数据库中的值。 如果该方法的返回值是true,举杯显示和重点应该坐回的EditText一次。 重点应始终坐回的EditText和键盘应显示,直到方法的返回值是假的。

编辑:我想,我没有让我的真正的问题非常清楚又:在屏幕上没有其他项目应该能够编辑,直到EditText上的值在被编辑的值,这使得法“checkLiganame(liganame) “返回false。 只有的EditText场应该是可编辑的。

这里是我的代码(不工作对我来说):

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。 我试图编辑我的字符串,但没有任何反应。 相反,我的新的String表示第二的EditText。 我点击我的设备和在第一和第二的EditText reclick背面箭头 - >无键盘显示。

这是我的新代码:

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

Answer 1:

只要穿上这条线在您onCreate()

editText.requestFocus();

它为我,希望它有助于



Answer 2:

请求焦点是不够的,显示键盘。

为了让对焦和显示你会写这样的键盘:

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

编辑:添加到答案额外的信息添加了checkLiganame方法之后。

在checkLiganame方法你检查光标为null。 光标总是会返回一个对象,所以对于空的检查没有做任何事情。 然而,问题是在线路db.close();

当您关闭数据库连接时, Cursor变为无效,并最有可能零化。

因此,关闭数据库你获取的价值之后。

而不是检查光标空的,你应该检查返回的行数是大于0:如果(cursor.getCount()> 0),然后设置布尔为true,如果如此。

EDIT2:因此,这里是如何使它工作的一些代码。 EDIT3:对不起错误的代码我加...; S

首先,你需要明确的重点,如果其他EditText获得焦点。 这是可以做到的myEditText.clearFocus() 然后在你的onFocusChangeListener你不应该真正关心,如果第一EditText具有焦点与否,所以onFocusChangeListener可能是这个样子:

public class MainActivity extends Activity implements OnFocusChangeListener {
    private EditText editText1, editText2;

    @Override
    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);
    }

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

更换第一次检查if(liganame.length() == 0)用自己的支票,那么它应该工作。 注意,所有的EditText意见应该已经建立了onFocusChangeListener相同的听众喜欢我的例子已经做到了。



Answer 3:

Darwind代码没有显示键盘。

这对我的作品:

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

如果键盘没有显示,试图迫使:

        imm.showSoftInput(_searchText, InputMethodManager.SHOW_FORCED);


Answer 4:

这改变了的EditText的焦点单击按钮时:

public class MainActivity extends Activity {
    private EditText e1,e2;
    private Button b1,b2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        e1=(EditText) findViewById(R.id.editText1);
        e2=(EditText) findViewById(R.id.editText2);
        e1.requestFocus();
        b1=(Button) findViewById(R.id.one);
        b2=(Button) findViewById(R.id.two);
        b1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                e1.requestFocus();

            }
        });
        b2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                e2.requestFocus();
            }
        });
    }
}


Answer 5:

此工程从我:

public void showKeyboard(final EditText ettext){
    ettext.requestFocus();
    ettext.postDelayed(new Runnable(){
            @Override public void run(){
                InputMethodManager keyboard=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                keyboard.showSoftInput(ettext,0);
            }
        }
        ,200);
}

隐藏:

private void hideSoftKeyboard(EditText ettext){
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(ettext.getWindowToken(), 0);
}


Answer 6:

如果我们创建一个EditText动态那么我们必须设置requestFocus()方法为如下。

    EditText editText = new EditText(this);
    editText.setWidth(600);
    editText.requestFocus();

如果我们已经宣布在XML视图中的组件,然后我们要找到它,我们可以为下面给出的焦点。

EditText e1=(EditText) findViewById(R.id.editText1);
e1.requestFocus();

它设置只集中到对应的EditText组件。



Answer 7:

这是对我工作,将焦点设置和显示键盘还

EditText userNameText = (EditText) findViewById(R.id.textViewUserNameText);
userNameText.setFocusable(true);
userNameText.setFocusableInTouchMode(true);
userNameText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(userNameText, InputMethodManager.SHOW_IMPLICIT);


Answer 8:

    mEditText.setFocusableInTouchMode(true);
    mEditText.requestFocus();

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


Answer 9:

    Button btnClear = (Button) findViewById(R.id.btnClear);

    EditText editText1=(EditText) findViewById(R.id.editText2);
    EditText editText2=(EditText) findViewById(R.id.editText3);

    btnClear.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            editText1.setText("");
            editText2.setText("");

            editText1.requestFocus();
        }
    });


Answer 10:

 private void requestFocus(View view) {
        if (view.requestFocus()) {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }

//Function Call
requestFocus(yourEditetxt);


Answer 11:

我不知道你是否alredy找到了解决办法,但对于再次请求焦点后您编辑的问题:

你有没有试过在电话上的方法selectAll()setSelection(0)如果不能为空)在你的edittext1?

请让我知道这会有所帮助,所以我将编辑我的回答对一个完整的解决方案。



Answer 12:

new OnEditorActionListener(){
   @Override
   public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
      editText.requestFocus();
      //used ******* return true ******
      return **true**;
   }
} 


Answer 13:

对于Xamarin.Android我创造了这个扩展。

public static class ViewExtensions
{
    public static void FocusEditText(this EditText editText, Activity activity)
    {
        if (editText.RequestFocus())
        {
            InputMethodManager imm = (InputMethodManager)activity.GetSystemService(Context.InputMethodService);
            imm.ShowSoftInput(editText, ShowFlags.Implicit);
        }
    }
}


Answer 14:

请尝试在清单验证码

<activity android:name=".EditTextActivity" android:windowSoftInputMode="stateAlwaysVisible">
</activity>


Answer 15:

你可以用一行做到这一点:

yourEditText.RequestFocusFromTouch();


文章来源: Set Focus on EditText