2015-09-16 2 views
0

Вот мой вопрос:Android - ListView - прокрутка программно конкретного макета

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

Exemple:

это один ListView ряд:

------------------

- -

- Layout1 -

- -

- Layout2 -

- layout3 -

- и т.д ... -

------------------

Я знаю, что в Scrollview мы можем используйте getY() в макете, но когда я сделал это для своего конкретного макета в списке, он вернет мне 0. Но я не могу использовать scrollview, потому что мне нужно получить SwipeRefreshLayout (или мы можем получить его в Scrollview?)

Надеюсь, я был достаточно ясен, если это не так, пожалуйста, скажите мне.

+0

Существует способ, например scrollto(), использовать этот метод с методом smoothscroll() –

ответ

0

Если вы запускаете прокрутку по действию, например onClick.

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     View row = listView.getChildAt(0); 
     View layout = row.findViewById(R.id.layout_to_scroll_to); 

     listView.smoothScrollToPositionFromTop(rowPositionToScrollTo, layout.getTop()); 
    } 
}); 

Если вы запускаете прокрутку при загрузке страницы. Добавьте это в onCreate или onActivityCreated для Activity или Fragment, соответственно.

getListView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     listView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
     View row = listView.getChildAt(0); 
     View layout = row.findViewById(R.id.layout_to_scroll_to); 

     listView.smoothScrollToPositionFromTop(rowPositionToScrollTo, layout.getTop()); 
    } 
}); 

Изменить smoothScrollToPositionFromTop в setSelectionFromTop без всякой прокрутки анимации.

Надеюсь, это поможет!

+0

Спасибо за ответ, но это моя проблема, я не хочу прокручивать до определенной строки, но я хочу прокрутить до определенной макет В строке. Метод smoothScrollBy выполняет эту работу, но я не могу получить позицию, где можно прокручивать (view.gety() return 0) –

+0

Вам не следует использовать getY(), но getTop(). getTop() возвращает положение дочернего представления относительно его родительского представления. Если вы получаете 0, это означает, что он находится в верхней части своего прямого родителя. – BladeCoder

+0

Я пробовал getTop на макете3 (c.f мой вопрос), но он тоже меня возвращает 0 –

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