У меня есть ListView, он находится под панелью действий и над EditText. Просмотреть фотографии: Получить позицию позиции списка просмотра после отображения мягкой клавиатуры
Элементы просмотра списка имеют произвольную высоту в соответствии с ее содержанием.
Когда элемент просмотра списка кликов, мне нужно сфокусироваться на EditText и открыть мягкую клавиатуру, между тем я хочу, чтобы нажимался на верхнюю часть списка, например, если я нажимаю item2, я хочу видеть:
для сдачи 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);
, но до сих пор не помогает.
Извините, это не работает для меня, когда я пытался вызвать 'smoothScrollToPosition (0)', он даже не может перейти к первому элементу списка. –