Android - 选择 Spinner 后将焦点设置在 EditText 上

标签 android xml focus android-edittext spinner

我在屏幕上显示了以下项目:

EditText Forename
Spinner gender selection (Male | Female)
EditText Email

首次启动应用程序时,我希望将焦点设置在 Forename EditText 上。然后在微调器中选择“男性”或“女性”后, 我希望将焦点设置在位于微调器下方的电子邮件 EditText 上。

我已经使用 setOnItemSelectedListener 在电子邮件 EditText 上设置了 requestFocus,但问题是它会自动将焦点设置在 这个 EditText 每当我启动应用程序时。 发生这种情况是因为默认情况下微调器显示第一个选择,在这种情况下是“男性”,因此它认为 已经做出选择并将焦点设置在“电子邮件”字段上。

我不介意默认情况下第一个选择已经在微调器中被选中,但如果我能以某种方式覆盖 requestFocus 在 最初给 EditText 起个名字就好了。

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

   <EditText
        android:id="@+id/ForenameForm"
        android:layout_width="285dp"
        android:layout_height="65dp"
        android:hint="@string/forenameHint"
        android:lines="1"
        android:singleLine="true"
        android:textSize="20sp" >
    </EditText>


   <Spinner  
        android:id="@+id/SpinnerGender" 
        android:spinnerMode="dialog"
        android:textSize="30sp" 
        android:layout_width="285dp"
        android:layout_height="60dp"
        android:prompt="@string/spinnerGender"  
        android:entries="@array/genderList">

    </Spinner>

   <EditText
        android:id="@+id/EmailForm"
        android:layout_width="285dp"
        android:layout_height="65dp"
        android:hint="@string/emailHint"
        android:lines="1"
        android:singleLine="true"
        android:textSize="20sp" >
    </EditText>

</LinearLayout>

Activity 类:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText forename=(EditText)findViewById(R.id.ForenameForm);
        forename.requestFocus();

        final EditText email=(EditText)findViewById(R.id.EmailForm);

        Spinner spinner=(Spinner)findViewById(R.id.SpinnerGender);
        spinner.setFocusable(true);
        spinner.setFocusableInTouchMode(true);   


        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
        {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                email.requestFocus();               
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {

            }               
        });  
    }

最佳答案

这个解决方案怎么样。

define a boolean flag and set it default false.

in oncreate set the focus of forname

in setOnItemSelectedListener 
     if flag is false then set flag true
     else focus email 

所以你的代码会像

boolean flag = false;
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText forename=(EditText)findViewById(R.id.ForenameForm);
        forename.requestFocus();

        final EditText email=(EditText)findViewById(R.id.EmailForm);

        Spinner spinner=(Spinner)findViewById(R.id.SpinnerGender);
        spinner.setFocusable(true);
        spinner.setFocusableInTouchMode(true);   


        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
        {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
              // changes here
                if(flag == false)
                    flag = true;
                else 
                    email.requestFocus();               
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {

            }               
        });  
    }

关于Android - 选择 Spinner 后将焦点设置在 EditText 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16179545/

相关文章:

android - 在某些类中使用JodaTime时,无法从Android Studio “Execution failed for task ':packageRelease'”生成签名的apk

java - 您可以使用屏蔽或其他方式在单个 ImageView 中添加三个 onClick 监听器吗?

android - 如何在 Android Studio 中打开主题编辑器?

java - 如何从sqlite数据库获取数据

c# - 通过访问无效元素在 C# 中通过 XSD 验证 XML

javascript - 如何阻止 IE (Internet Explorer) 中的内联 block 元素获得焦点

javascript - PHP $_POST 显示 null,不确定是 HTML、Javascript 还是 PHP

java - 将java对象转换为XML?

java - textFields 上的无限焦点循环

wpf - 以编程方式将光标移动到 TextBlock