使用RequestFocus()后,EditText字段的行为将被禁用

时间:2019-02-01 00:45:40

标签: android xamarin xamarin.android android-edittext focus

我有一个EditText字段,用户可以在其中输入清单位置。如果该位置无效,则会显示错误说明(即“找不到位置”),然后用户必须再次按该字段以尝试其他位置。

我正在尝试使用RequestFocus(),以便用户在进入另一个位置之前不需要再次按。它出现正常工作。 EditText字段带有下划线,并且光标在其开头闪烁,但是不能键入任何内容。好像该字段被禁用,但是debug显示它既已启用又具有HasFocus。实际上,它是唯一启用的EditText。

 <EditText
    p1:layout_width="150dp"
    p1:layout_height="33dp"
    p1:layout_below="@id/spnrAreas"
    p1:id="@+id/etxtLocation"
    p1:layout_toRightOf="@id/lblLocation"
    p1:textColor="@color/Black"
    p1:inputType="textCapCharacters"
    p1:nextFocusDown="@+id/etxtItem" />

                       {txtErrorMessage.Text = "Location not found";
                        etxtLocation.Text = "";
                        etxtLocation.RequestFocus(); 
                        return; }

除了RequestFocus()之外,还有没有其他方法可以使程序像按EditText(etxtLocation)一样起作用?

2 个答案:

答案 0 :(得分:2)

尝试一下:

etxtLocation.RequestFocus(); 
InputMethodManager imm = (InputMethodManager) GetSystemService(Context.InputMethodService);  
imm.ShowSoftInput(etxtLocation, ShowFlags.Implicit);

答案 1 :(得分:0)

我可以通过将“ etxtLocation.RequestFocus()”移到“ extItem” FocusChange()事件处理程序中来解决此问题,在按Enter键后焦点将移至该处。从那里开始,它的行为符合预期:

        void etxtItem_FocusChange(object sender, View.FocusChangeEventArgs e)
    {
        if (etxtItem.HasFocus)
        {
            //request focus back to Location if its value was incorrect.
            if (String.IsNullOrEmpty(etxtLocation.Text))
           {
                etxtLocation.RequestFocus();
            }  } } return;