Не удается запросить Фокус спиннер

У меня раздражающая проблема с экраном. Экран состоит из набора прядильных устройств один под другим, а затем под прядильщиком EditText.

Проблема в том, что когда экран запускается, EditText имеет фокус, а это означает, что некоторые Spinners находятся вне верхней части экрана. Как я ни стараюсь, я не могу сделать так, чтобы верхний Spinner начал фокусироваться, используя <requestFocus/> на экране XML, или с помощью requestFocus() в коде. Я пытался сделать то, что предлагает requestFocus, пропуская следующий EditText, и, если я правильно следую предложению, он тоже не работает.

Чтобы воспроизвести проблему, создайте новый проект Android в Eclipse. main.xml - это

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Spinner 
        android:id="@+id/spinner"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">   
        <requestFocus />
    </Spinner>
    <EditText  
        android:id="@+id/edittext"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

Код активности

package nz.co.kb.testspinner;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class TestSpinner extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);
        View view = getLayoutInflater().inflate(R.layout.main, null);
        final View spinner = view.findViewById(R.id.spinner);
        view.post(new Runnable() {
            public void run() {
                spinner.requestFocus();
            }
        });
        setContentView(view);
        spinner.requestFocus();
    }
}

Обратите внимание на несколько стилей requestFocus.

Это ошибка платформы или я что-то не так делаю?

Благодарю.

3 ответа

Решение

Из онлайн- документации:

Представление фактически не будет фокусироваться, если оно не фокусируется (isFocusable () возвращает false) или если оно фокусируемое и не фокусируемое в сенсорном режиме (isFocusableInTouchMode()), когда устройство находится в сенсорном режиме.

У меня была похожая проблема, которую я решил, выполнив две вещи:

1) Я установил объект Spinner сверху (в методе onCreate), чтобы убедиться, что мой код выполняется первым. 2) Я использовал следующее:

Spinner s1 = (Spinner) findViewById(R.id.spinner1);
        s1.setFocusable(true);
        s1.setFocusableInTouchMode(true);

Дайте мне знать, если это поможет или вам нужна дополнительная помощь.

В моем случае это сработало.

Spinner s1 = (Spinner) findViewById(R.id.spinner1);
s1.requestFocusFromTouch();
s1.performClick();
Другие вопросы по тегам