Минимальная сумма прокрутки при программном выборе ListItem в Android ListView - PullRequest
0 голосов
/ 14 июня 2010

ссылаясь на этот вопрос: как работает прокрутка в просмотре списка андроида?

при переходе из состояния 2 в 3 элемент списка по щелчку увеличивается в размере, чтобы показать больше информации.если выбранный элемент был последним на экране, расширенный элемент списка не полностью виден, потому что новое содержимое вытекает внизу экрана.

мое текущее решение - вызвать "setSelection (index)",если последний видимый элемент списка был нажат.это результаты в состоянии, когда выбор выводится в верхнюю часть экрана.это раздражает, потому что список перемещается снизу вверх.

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

1 Ответ

3 голосов
/ 10 января 2011

Добавьте пользовательский OnItemClickListener в ListView. Реализуйте OnItemClickListener.onItemClick следующим образом:

public void onItemClick(final AdapterView<?> parent, final View view,
        int position, long id) {
    View hiddenContent = view.findViewById(R.id.hiddenContent);
    hiddenContent.setVisibility(View.VISIBLE);

    // At this point the layout hasn't be redone and you don't have reliable 
    // measurements on the view.  It would be nice to do something after the view
    // has gone through another layout
    view.post(new Runnable() {
        public void run() {
            Rect r = new Rect();
            view.getDrawingRect(r);
            parent.requestChildRectangleOnScreen(view, r, false);
        }
    });
}

Всякий раз, когда вы нажимаете на элемент списка, чтобы показать скрытое содержимое, элемент управления ListView запускается и выполняет любую прокрутку (или прокрутку, если она не нужна), чтобы полностью показать строку.

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