2015-08-31 4 views
4

Кто-нибудь знает, как реализовать панель сворачивания с использованием списка, а не просмотра recycler?Как использовать Collapsing ToolBar с ListView вместо просмотра Recycler

+3

Для создания сворачивания 'Toolbar' вам необходимо использовать' CoordinatorLayout'. И он работает только с интерфейсами 'ScrollingView' и' NestedScrollingChild'. 'RecyclerView' реализует его. 'ListView' нет. – eleven

+0

Просто интересно: Не могли бы вы написать CustomView, который расширяет ListView и реализует ScrollingView и NestedScrollingChild, а затем использовать его в CollapsingToolbar? –

+0

Okay Спасибо @Foxinsocks Думаю, мне придется перестроить кучу моего кода ListView в Recycler Views. – KudzieChase

ответ

4

Чтобы сделать это ковшики вам необходимо, чтобы:

  1. Реализовать NestedScrollingChild в вашей реализации пользовательских ListView.

  2. Добавить поле private final NestedScrollingChildHelper mScrollingChildHelper; и инициализировать его в конструкторах

  3. делегата к нему методы из NestedScrollingChild

  4. Invoke setNestedScrollingEnabled(true); после mScrollingChildHelper инициализации

Вот мой список реализация вида, например:

public class NestedScrollingListView extends ListView implements NestedScrollingChild { 

    private final NestedScrollingChildHelper mScrollingChildHelper; 

    public NestedScrollingListView(Context context) { 
     super(context); 
     mScrollingChildHelper = new NestedScrollingChildHelper(this); 
     setNestedScrollingEnabled(true); 
    } 

    public NestedScrollingListView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mScrollingChildHelper = new NestedScrollingChildHelper(this); 
     setNestedScrollingEnabled(true); 
    } 

    @Override 
    public void setNestedScrollingEnabled(boolean enabled) { 
     mScrollingChildHelper.setNestedScrollingEnabled(enabled); 
    } 

    @Override 
    public boolean isNestedScrollingEnabled() { 
     return mScrollingChildHelper.isNestedScrollingEnabled(); 
    } 

    @Override 
    public boolean startNestedScroll(int axes) { 
     return mScrollingChildHelper.startNestedScroll(axes); 
    } 

    @Override 
    public void stopNestedScroll() { 
     mScrollingChildHelper.stopNestedScroll(); 
    } 

    @Override 
    public boolean hasNestedScrollingParent() { 
     return mScrollingChildHelper.hasNestedScrollingParent(); 
    } 

    @Override 
    public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, 
            int dyUnconsumed, int[] offsetInWindow) { 
     return mScrollingChildHelper.dispatchNestedScroll(dxConsumed, dyConsumed, 
      dxUnconsumed, dyUnconsumed, offsetInWindow); 
    } 

    @Override 
    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) { 
     return mScrollingChildHelper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow); 
    } 

    @Override 
    public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) { 
     return mScrollingChildHelper.dispatchNestedFling(velocityX, velocityY, consumed); 
    } 

    @Override 
    public boolean dispatchNestedPreFling(float velocityX, float velocityY) { 
     return mScrollingChildHelper.dispatchNestedPreFling(velocityX, velocityY); 
    } 
} 
+0

Это сработало для меня спасибо – KudzieChase

+0

почему мы не можем обернуть список в виде вложенного scrollview? , NestedScrollView также реализует nestedscrollingchild, не так ли? –

0

Только добавьте этот код в свой проект.
Он работает только на устройствах Lollipop и позже.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     listView.setNestedScrollingEnabled(true); 
     listView.startNestedScroll(View.OVER_SCROLL_ALWAYS); 
    } 
Смежные вопросы