2015-07-28 16 views
9

Wykonuję mały projekt z RecyclerView z elementami CardView w środku. Stworzyłem kartę rozszerzalną (rozwiniętą poprzez naciśnięcie małego przycisku wewnątrz karty). Każda karta zawsze zawiera widoczną część (id: top_layout) i część rozwijaną (id: expandable_part_layout).Karta rozszerzeń RecyclerViewView

Problem polega na tym, że gdy rozwijam ostatni element lub element, który po rozwinięciu ma dolną krawędź poniżej dolnej krawędzi okna RecyclerView (jakaś część elementu lub rozwinięta pozycja jest niewidoczna dla użytkownika), widok RecyclerView powinien przewijać wszystkie elementy, aby pokazać cały przedmiot, który Rozbudowałem. Próbowałem użyć metody scrollToPosition i podobnych metod, aby przewinąć do końca rozwiniętej karty, ale bez powodzenia.

Moje pytanie brzmi: jak to zrobić po rozwinięciu zwinięcia karty w górę RecyclerView o wysokości rozwiniętej części karty? - To mój pomysł, może ktoś ma lepsze rozwiązanie.

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:cardCornerRadius="8px" 
    app:cardPreventCornerOverlap="false"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    > 

    <RelativeLayout 
     android:id="@+id/top_layout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="false" 
     android:layout_alignParentTop="true" 
     > 
      <!-- some other controls --> 

      <ImageButton 
       android:id="@+id/card_header_inner_expand_btn" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:background="?android:selectableItemBackground" 
       android:clickable="true" 
       android:padding="6dp" 
       android:src="@drawable/expand_icon" /> 

    </RelativeLayout> 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/expandable_part_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/top_layout" 
     android:animateLayoutChanges="true" 
     android:clickable="false" 
     android:visibility="gone"> 

     <RadioGroup 
      android:id="@+id/extened_stage_radiogroup" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:orientation="vertical"> 

      <RadioButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 

      <RadioButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 

      <RadioButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 

     </RadioGroup> 

     <!-- some other controls --> 

    </RelativeLayout> 
</RelativeLayout> 

+1

Czy znalazłeś rozwiązanie tego problemu? Mam dokładnie ten sam problem. – Kerkhofsd

+0

Jestem również zainteresowany, jeśli znalazłeś rozwiązanie tego problemu. – Allinone51

+0

Niestety, nie znalazłem jeszcze rozwiązania. – Darko

Odpowiedz

1

Możesz użyć tej lib instancję swój własny opracowany sposób, spróbuj tego:

Krok 1: Dodaj poniżej uzależnienia do pliku build.gradle:

**compile 'com.github.traex.expandablelayout:library:1.2.2'** use instead of 
compile 'com.github.traex.expandablelayout:library:1.3' 

KROK 2: Dodaj poniżej Zobacz układ swojej karty, card_layout Musi być l ook tak:

<com.andexert.expandablelayout.library.ExpandableLayout 
    android:id="@+id/row_0" 
    xmlns:expandable="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    expandable:headerLayout="@layout/YOUR_CARD_VIEW_UI" 
    expandable:contentLayout="@layout/YOUR_CARD_VIEW_EXPANDED_UI"/> 

KROK 3: w twojej określić z RecyclerView pamiętać, aby:

recList.setItemViewCacheSize(ITEMS_COUNT); 

krępuj się zapytać :-)

2

Co tecnique używasz w celu Zrób to?

byłem w takiej samej sytuacji, ale dla mnie problemem były te funkcje ExpandAndCollapseViewUtil.expand() i ExpandAndCollapseViewUtil.collapse() z tym tutorialu Diseño Android: Tarjetas con CardView więc nie używaj go. Zamiast tego po prostu pokazuję/ukrywam widok karty bez animacji.

+0

Dość proste rozwiązanie, dziękuję! –