2015-06-12 5 views
0

У меня есть ListView, он находится под панелью действий и над EditText. Просмотреть фотографии: The original lookingПолучить позицию позиции списка просмотра после отображения мягкой клавиатуры

Элементы просмотра списка имеют произвольную высоту в соответствии с ее содержанием.

Когда элемент просмотра списка кликов, мне нужно сфокусироваться на EditText и открыть мягкую клавиатуру, между тем я хочу, чтобы нажимался на верхнюю часть списка, например, если я нажимаю item2, я хочу видеть:

After clicking an item

для сдачи Clicked элемента в верхней части ListView, при нажатии пункта, я буду получать щелкнутой пункт View своим положением, и вызвать view.getLocationOnScreen(locations), чтобы получить его у местоположение и использовать это у минус ActionBar-х высота, затем я получаю расстояние до прокрутки, при последнем звонке listview.smoothScrollBy(distance, 100);.

Этот подход хорошо работает после отображения мягкой клавиатуры, поскольку высота списка будет фиксирована; но он не работает в первый раз, когда я нажимаю элемент списка, потому что в этот момент высота списка будет изменена, так как мягкая клавиатура занимает несколько пробелов, что приводит к тому, что когда я использую view.getLocationOnScreen(locations), она возвращает старую позицию вид, старый означает положение перед показанной мягкой клавиатурой, я также попытался использовать view.postDelayed(new Runnable() {//Gets view position here!}, 1000);, но получил то же самое старое положение.

Итак, вопрос должен состоять в том, как получить последнюю позицию после показанной клавиатуры?

Я использую android:transcriptMode="normal" для ListView и adjustResize для windowSoftInputMode.

EDIT:

Также попробовал int firstVisiblePos = commentsListView.getFirstVisiblePosition(); int offset = firstVisiblePos - clickedPosition; commentsListView.smoothScrollByOffset(offset);, но до сих пор не помогает.

ответ

0

commentsListView.setSelection(clickedPosition + 1);, получил его, просто это работает для меня, хотя это не имеет анимации (не гладкой), это достаточно хорошо для меня, для создания гладкой прокрутки в положение, используйте этот ответ [ссылка] smoothScrollToPositionFromTop() is not always working like it should

0

Вам не нужно использовать высоту экрана для прокрутки спискаView. Вы можете использовать ListView в smoothScrollToPosition (int position) для прокрутки до определенного места в списке.

+0

Извините, это не работает для меня, когда я пытался вызвать 'smoothScrollToPosition (0)', он даже не может перейти к первому элементу списка. –

Смежные вопросы