Показать последний элемент в ListiView, когда вы нажимаете на редактировать текст - PullRequest
6 голосов
/ 16 марта 2011

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

    bodyText.setOnFocusChangeListener(new OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {               
            getListView().setSelection(getListView().getCount());
        }
    });

    bodyText.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            getListView().setSelection(getListView().getCount());
        }
    });

Отлично работает и захватывает последний элемент, проблема в том, что появляется программная клавиатура и покрывает последние 3 элемента в списке. Есть ли способ показать последний элемент ПОСЛЕ появления программной клавиатуры и изменения размера экрана? Спасибо!

Ответы [ 4 ]

18 голосов
/ 17 марта 2011

Я создал свой собственный пользовательский ListView следующим образом:

public class CustomListView extends ListView {

public CustomListView (Context context) {
    super(context);
}

public CustomListView (Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomListView (Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) {
    super.onSizeChanged(xNew, yNew, xOld, yOld);

    setSelection(getCount());

}
}

Вы должны включить все 3 конструктора, иначе будет выдано исключение.

Затем в XML, куда вы обычно помещаете

ListView

android:id="@+id/android:list"
android:layout_width="fill_parent" 
android:layout_height="fill_parent"

Изменить ListView на com.blah.blah.CustomListView .

Извинитеиз-за грязного макета по какой-то причине я не могу заставить работать форматировщик.

Запустите ваше приложение.Теперь, когда вы нажимаете на EditText, он показывает последний элемент ПОСЛЕ экранной клавиатуры!Обратите внимание, что существуют некоторые ограничения, например, когда функция автозаполнения появляется при вводе текста в EditText, он также отображает последний элемент из-за изменения размера ListView.

Наслаждайтесь!

2 голосов
/ 07 мая 2012

Решение, предлагаемое @Maurice, является почти правильным (или, по крайней мере, оно почти работает для меня).Мне пришлось изменить метод onSizeChanged, чтобы поместить setSelection в вызов post:Очередь будет запущена в потоке пользовательского интерфейса. "Эта технология также используется в некоторых источниках AbsListView для Android.

0 голосов
/ 13 июля 2016

Для тех, кто работает с новым рекомендуемым виджетом RecyclerView:

точно так же, как принятый ответ, но замените:

setSelection(getCount());

следующим:

 (LinearLayoutManager)getLayoutManager())
.scrollToPositionWithOffset(getAdapter().getItemCount() - 1, 0);

LinearLayoutManager и StaggeredGridLayoutManager имеют этот метод.так что используйте это LayoutManagers.

0 голосов
/ 16 марта 2011

Используйте

<activity
.....
android:windowSoftInputMode="adjustResize" />

в файле манифеста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...