2011-01-17 2 views
5

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

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

+2

Как я полагаю, рекомендации для Android UI в целом не рекомендуют использовать активные элементы управления, которые могут получать фокус и ввод в каждом элементе списка. Поэтому я пытаюсь обмануть его. Пока что явная настройка фокуса с помощью requestFocus на конкретном EditText не помогает, поскольку адаптер переназначает каждый элемент после ListView.onSizeChanged, поэтому я считаю, что адаптер-переназначение является источником фокуса. –

ответ

0

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

+0

Я сделал переопределение - это не помогает, поскольку переназначение в адаптере происходит после изменения размера, очевидно, нет, потому что ListView недействителен. Теперь я работаю над составлением списка TextViews с возможностью редактировать элемент, нажав на новый экран ... –

+0

Вы можете, конечно, показать диалог с TextEdit внутри, когда нажимаете на элемент списка. Диалоги, как правило, принадлежат к той же Деятельности, с которой они были начаты, и они позиционируют себя прямо над родительской деятельностью, не скрывая ее полностью. Таким образом, вы также получаете визуальное указание на то, что вы не оставили фактическую активность. Возможно, эта ссылка может быть полезной: http://groups.google.com/group/android-beginners/browse_thread/thread/efdfb8c7e24fee93?pli=1 – dbm

+0

Я только что понял, что наличие диалога или другого специального действия для редактирования запись элемента списка, вероятно, является официальным способом подхода к графическому интерфейсу android. –

0

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

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