Android: ListView с EditTexts искажает фокус и IME

У меня есть ListActivity с настраиваемыми элементами, где у каждого элемента есть собственный TextEdit. При нажатии на любой из них открывается клавиатура IME и изменяется размер ListView. Итак, EditText, который недавно получил фокус при нажатии, теряет его. Второе нажатие требуется, чтобы поставить его сфокусированным или уверенным. Это происходит только тогда, когда у меня в списке перемещается более 1 элемента.

Есть ли способ открыть IME и удерживать фокус на EditText одним нажатием?


person dykzei eleeot    schedule 17.01.2011    source источник
comment
Поскольку я полагаю, что руководящие принципы пользовательского интерфейса Android в целом не рекомендуют использовать активные элементы управления, которые могут получать фокус и вводить каждый элемент списка. Так что я пытаюсь обмануть. Пока что явная установка фокуса с помощью requestFocus на конкретный EditText не помогает, поскольку адаптер переназначает каждый элемент после ListView.onSizeChanged, поэтому я считаю, что переназначение адаптера является источником потери фокуса.   -  person dykzei eleeot    schedule 17.01.2011


Ответы (2)


Вы хотите изменить размер списка? Можете ли вы переопределить ListView.onSizeChanged и использовать его вместо того, чтобы «перебрасывать» его в super.onSizeChanged (при условии, что ваше предположение об источнике ошибки верно)?

person dbm    schedule 17.01.2011
comment
Я переопределил - это не помогает, поскольку переназначение в адаптере происходит после изменения размера, очевидно, не потому, что ListView недействителен. Сейчас я работаю над составлением списка TextViews с возможностью редактировать элемент нажатием на новом экране ... - person dykzei eleeot; 18.01.2011
comment
Вы, конечно, можете показать диалог с TextEdit внутри при нажатии на элемент списка. Диалоги, как правило, принадлежат к тому же Activity, из которого они были начаты, и располагаются прямо над родительским Activity, не скрывая его полностью. Таким образом, вы также получите визуальную индикацию того факта, что вы не вышли из фактического Activity. Возможно, вам поможет эта ссылка: groups.google. ru / group / android-beginners / browse_thread / thread / - person dbm; 18.01.2011
comment
Я только что понял, что наличие диалога или другого специального действия для редактирования записи элемента списка, вероятно, является родным официальным способом подхода к графическому интерфейсу Android. - person dykzei eleeot; 19.01.2011

Я решил эту проблему, сохранив выбранный EditText в переменной и запросив на нем фокус после задержки. Это взлом, но иногда Android требует взлома.

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    public void run() {
        EditText editText = getListAdapter().tappedEditText;
        if (editText != null) {
            editText.requestFocus();
        }
    }
}, 100);
person Quentamia    schedule 18.04.2012