Андроид EditText: attibute nextFocusDown перестает работать, когда установлено onClick - PullRequest
1 голос
/ 03 ноября 2011

Кто-нибудь знает, почему перестает работать атрибут android: nextFocusDown, когда мы устанавливаем onClick для него?

В приведенном ниже примере у нас есть некоторый EditText с этим атрибутом:

<TableRow
android:weightSum="1"
android:gravity="center">
<EditText
    android:id="@+id/txtChave1"
    android:maxLength="4"
    android:gravity="center"
    android:textSize="16dp"
    android:layout_height="wrap_content"
    android:layout_weight=".23"
    android:layout_width="0dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:singleLine="true"
    android:selectAllOnFocus="true"
    android:inputType="textCapCharacters"
    android:nextFocusDown="@+id/txtChave2"></EditText>

<EditText
    android:id="@+id/txtChave2"
    android:maxLength="4"
    android:gravity="center"
    android:textSize="16dp"
    android:layout_height="wrap_content"
    android:layout_weight=".23"
    android:layout_width="0dp"
    android:layout_marginRight="5dp"
    android:singleLine="true"
    android:selectAllOnFocus="true"
    android:inputType="textCapCharacters"
    android:nextFocusDown="@+id/txtChave3"></EditText>

<EditText
    android:id="@+id/txtChave3"
    android:maxLength="4"
    android:gravity="center"
    android:textSize="16dp"
    android:layout_height="wrap_content"
    android:layout_weight=".23"
    android:layout_width="0dp"
    android:layout_marginRight="5dp"
    android:singleLine="true"
    android:selectAllOnFocus="true"
    android:inputType="textCapCharacters"
    android:nextFocusDown="@+id/txtChave4"></EditText>

<EditText
    android:id="@+id/txtChave4"
    android:maxLength="4"
    android:gravity="center"
    android:textSize="16dp"
    android:layout_height="wrap_content"
    android:layout_weight=".23"
    android:layout_width="0dp"
    android:layout_marginRight="5dp"
    android:singleLine="true"
    android:selectAllOnFocus="true"
    android:inputType="textCapCharacters"></EditText>
</TableRow>

Как определено выше, когда пользователь нажимает «следующую кнопку» на виртуальной клавиатуре, фокус меняется, как и ожидалось ... Но, если мы установим атрибут onClick, android: nextFocusDown не будет работать больше.

<EditText
android:id="@+id/txtChave1"
android:maxLength="4"
android:gravity="center"
android:textSize="16dp"
android:layout_height="wrap_content"
android:layout_weight=".23"
android:layout_width="0dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:singleLine="true"
android:selectAllOnFocus="true"
android:inputType="textCapCharacters"
android:nextFocusDown="@+id/txtChave2"
android:onClick="onClickHandler">
</EditText>

Любой совет?

Большое спасибо!

Ответы [ 2 ]

12 голосов
/ 02 января 2012

Делайте это программно, потому что когда вы вызываете android: nextFocusDown в XML может быть объектом, который вы хотите вызвать в nextFocus, не будет его создавать до тех пор, пока

private void setUpView(){
    editText1=(EditText)findViewById(R.id.editText1);
    editText2=(EditText)findViewById(R.id.editText2);
    editText3=(EditText)findViewById(R.id.editText3);
 }
private void setUpFocus(){
  editText1.setNextFocusDownId(R.id.editText2);
    editText2.setNextFocusDownId(R.id.editText8);// you can give focus to any id
    editText3.setNextFocusDownId(R.id.editText9);
 }

Вызовите setUpView () перед setUpFocus () в onCreate ().

0 голосов
/ 11 марта 2014

Недавно столкнулся с той же проблемой и обнаружил, что она будет работать, если вы используете setOnTouchListener вместо setOnClickListener. В методе onTouch используйте MotionEvent.ACTION_DOWN или MotionEvent.ACTION_UP, в зависимости от того, что вам нужно. Также не забудьте вернуть FALSE для событий, которые также должны быть обработаны системой (если вы хотите быть в безопасности, всегда возвращайте false).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...