requestFocus пропускает следующий EditText

У меня проблемы с фокусировкой управления. Мое определение интерфейса ниже имеет:

источник (RadioGroup/дополнительно) пункт назначения (EditText) количество (EditText) передача (кнопка)

Я изменяю видимость «источника» в свой код. Когда время, которое я не показываю, фокус автоматически переходит на «количество», которое, как я ожидаю, вместо этого будет «пунктом назначения». Я не знаю, что мне не хватает. Я подозреваю, что это может быть ошибка Android, я не знаю. Кто-нибудь знает, как это решить?

Спасибо

<?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">

    <RadioGroup android:id="@+id/source"
     android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:orientation="vertical"
   android:visibility="gone">
   <RadioButton android:id="@+id/default"
    android:checked="false"
    android:text="@string/default"/>
 </RadioGroup>

 <TableLayout
  android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:stretchColumns="1">
     <TableRow>
   <TextView 
    android:text="@string/destination"
    android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textSize="16sp"
       android:textColor="#ffffff"
       android:paddingRight="10sp"
       android:layout_weight="1"/>

      <EditText android:id="@+id/destination"
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:singleLine="true"><requestFocus/></EditText>
  </TableRow>

  <TableRow>
   <TextView 
    android:text="@string/quantity"
    android:layout_width="wrap_content" 
       android:layout_height="wrap_content"
       android:textSize="16sp"
       android:textColor="#ffffff"
       android:paddingRight="10sp"
       android:layout_weight="1"/>

      <EditText android:id="@+id/quantity"
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:singleLine="true"/>
  </TableRow>
 </TableLayout>

 <Button android:id="@+id/transfer"
  android:layout_width="fill_parent" 
     android:layout_height="wrap_content"
     android:text="@string/transfer"/>
</LinearLayout>

person pocoa    schedule 18.11.2010    source источник
comment
Я тестирую это на Android 2.2 и не могу воспроизвести, в начале основное внимание уделяется пункту назначения. Если у вас по-прежнему возникают проблемы, я рекомендую добавить EditText e = (EditText) findViewById(R.id.destination); e.requestFocus(); в ваш метод onResume.   -  person Sebastian Roth    schedule 18.11.2010
comment
Спасибо за ваш ответ. Да, но я тестирую на Android 2.1. requestFocus() не смог решить проблему.   -  person pocoa    schedule 18.11.2010
comment
См. мой ответ в теме: stackoverflow.com/a/13194129/348192   -  person iBog    schedule 02.11.2012


Ответы (4)


Похоже, это известная проблема. В следующем сообщении о коде Google для проекта Android описана та же проблема.

Проблема 2705: настройка requestFocus на EditText не позволяет открывать виртуальную клавиатуру

Вы можете попробовать установить фокус в своем коде, а не в макете.

person Thomas    schedule 18.11.2010
comment
Спасибо за ссылку. Да, я пытался использовать destination.requestFocus(), но это не сработало. - person pocoa; 18.11.2010
comment
Спасибо. this.post(new Runnable() { public void run() { text.requestFocus(); } }); решил проблему. - person pocoa; 20.11.2010

Я столкнулся с той же проблемой. Попробуйте этот код, который сработал для меня.

             editText.post(new Runnable() {
                 public void run() {
                       editText.requestFocus(); 
                                   } 
                                           }); 
person Parag Chauhan    schedule 27.03.2013
comment
мое представление не выделяется при использовании метода фокусировки. Я тоже пробовал это, но бесполезно - person AndroidOptimist; 06.11.2013

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

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

person StenaviN    schedule 29.09.2011

Используйте метод requestFocus() EditText. :)

person Shamitha    schedule 08.11.2011