KeyCode_Enter для следующего EditText в ListView - PullRequest
1 голос
/ 27 декабря 2011

У меня есть многострочный ListView с несколькими EditText.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <EditText
        android:id="@+id/edit_tail"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number" />

    <EditText
        android:id="@+id/edit_cost"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number" />

   <EditText
        android:id="@+id/edit_rest"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number" />

</LinearLayout>

В EditText после ввода клавиши «Ввод» система устанавливает фокус следующим образом:

[EditText]  [EditText]  [EditText]
     ↓           ↓          ↓
[EditText]  [EditText]  [EditText]
     ↓           ↓          ↓
[EditText]  [EditText]  [EditText]
     ↓           ↓          ↓
    ...         ...        ...

Но я хочу:

     [EditText] -> [EditText] -> [EditText] ->

   -> [EditText] -> [EditText] -> [EditText] ->

  ->  [EditText] -> [EditText] -> [EditText]

Как решить эту проблему?

Ответы [ 3 ]

1 голос
/ 04 февраля 2012

У меня была та же проблема с горизонтальным перемещением фокуса в EditTexts. В моем случае у меня было всего несколько EditTexts, поэтому я добавил android:imeOptions="actionNext" в каждый EditTexts xml, а затем добавил OnEditorActionListener для каждого EditText. Пример кода:

_heightEdit.setOnEditorActionLister(getGotoNextListener(_weightEdit));
private OnEditorActionListener getGotoNextListener(final EditText next) {
        return new OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_NEXT) {
                    next.requestFocus();
                    return true;
                }
                return false;
            }
        };
    }

Это довольно хорошее решение проблемы.

1 голос
/ 29 декабря 2011

Один из способов - установить для заголовка ime значение «Next» вручную (можно сделать в xml или Java), а затем вручную переопределить прослушиватель onClick для этого действия и прослушать нажатие «следующей» клавиши.Затем вы можете просто позвонить requestFocus() на EditText, на который вы хотите переключить фокус.Честно говоря, хотя это будет довольно хлопотно, но я знаю, что это сработает.Надеюсь, есть лучший способ.

0 голосов
/ 18 июля 2015

Чтобы обеспечить фокусировку слева направо и сверху вниз для EditText в ListView, вы можете использовать следующие параметры XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <EditText
        android:id="@+id/edit_1"
        android:nextFocusRight="@+id/edit_2"
        android:imeOptions="actionNext"
        />

    <EditText
        android:id="@+id/edit_2"
        android:nextFocusRight="@+id/edit_3"
        android:imeOptions="actionNext"
        />

   <EditText
        android:id="@+id/edit_3"
        android:nextFocusRight="@+id/edit_4"
        android:imeOptions="actionNext"
        />

   <EditText
        android:id="@+id/edit_4"
        android:nextFocusDown="@+id/edit_1"
        android:imeOptions="actionNext"
        />

</LinearLayout>

Это работает для меня и, надеюсь, поможет вам.

...