2017-04-10 6 views
2

Basé sur les commentaires ci-dessous j'ai changé mon layout. Il fonctionne mais quand je vais au fond des éléments dans recyclerview et essaye de faire défiler vers le haut, il ne va que jusqu'au début du recyclerview. Je dois faire défiler à nouveau pour arriver au header.Recyclerview avec CoordinatorLayout et AppBarLayout

<?xml version="1.0" encoding="utf-8"?> 

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/white"> 

     <android.support.constraint.ConstraintLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      app:layout_scrollFlags="scroll"> 

      <de.hdodenhof.circleimageview.CircleImageView 
       android:id="@+id/iv_profile" 
       android:layout_width="70dp" 
       android:layout_height="70dp" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true" 
       android:layout_centerVertical="true" 
       android:layout_marginLeft="8dp" 
       android:layout_marginStart="8dp" 
       android:layout_marginTop="15dp" 
       android:gravity="center_vertical" 
       android:src="@drawable/ap_placeholder" 
       app:layout_constraintLeft_toLeftOf="parent" 
       app:layout_constraintTop_toTopOf="parent"/> 

      <TextView 
       android:id="@+id/tv_profile_name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="8dp" 
       android:layout_marginStart="8dp" 
       android:layout_marginTop="25dp" 
       android:text="@string/profile_name" 
       app:layout_constraintLeft_toRightOf="@+id/iv_profile" 
       app:layout_constraintTop_toTopOf="parent"/> 

      <TextView 
       android:id="@+id/tv_username" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="8dp" 
       android:layout_marginStart="8dp" 
       android:layout_marginTop="8dp" 
       android:text="@string/username" 
       android:textStyle="bold" 
       app:layout_constraintLeft_toRightOf="@+id/iv_profile" 
       app:layout_constraintTop_toBottomOf="@+id/tv_profile_name"/> 

      <ImageView 
       android:id="@+id/iv_settings" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginEnd="16dp" 
       android:layout_marginRight="16dp" 
       android:layout_marginTop="33dp" 
       android:contentDescription="@string/settings_content_description" 
       app:layout_constraintRight_toRightOf="parent" 
       app:layout_constraintTop_toTopOf="parent" 
       app:srcCompat="@drawable/ap_settings"/> 

      <TextView 
       android:id="@+id/tv_profile_description" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_marginEnd="16dp" 
       android:layout_marginLeft="16dp" 
       android:layout_marginRight="16dp" 
       android:layout_marginStart="16dp" 
       android:layout_marginTop="8dp" 
       android:ellipsize="end" 
       android:maxLines="2" 
       android:text="@string/profile_description" 
       app:layout_constraintLeft_toLeftOf="parent" 
       app:layout_constraintRight_toRightOf="parent" 
       app:layout_constraintTop_toBottomOf="@+id/iv_profile"/> 

      <View 
       android:id="@+id/view" 
       android:layout_width="0dp" 
       android:layout_height="1dp" 
       android:layout_marginTop="20dp" 
       android:background="@color/light_grey" 
       app:layout_constraintLeft_toLeftOf="parent" 
       app:layout_constraintRight_toRightOf="parent" 
       app:layout_constraintTop_toBottomOf="@+id/tv_profile_description"/> 

      <com.roughike.bottombar.BottomBar 
       android:id="@+id/bottom_bar" 
       android:layout_width="0dp" 
       android:layout_height="60dp" 
       android:layout_marginTop="20dp" 
       android:background="@color/light_grey" 
       app:bb_activeTabColor="@color/ap_yellow" 
       app:bb_inActiveTabColor="@color/ap_black" 
       app:bb_tabXmlResource="@xml/profile_bar_tabs" 
       app:layout_constraintLeft_toLeftOf="parent" 
       app:layout_constraintRight_toRightOf="parent" 
       app:layout_constraintTop_toBottomOf="@+id/tv_followers"/> 

      <TextView 
       android:id="@+id/tv_history" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="50dp" 
       android:layout_marginStart="50dp" 
       android:text="@string/tv_history" 
       app:layout_constraintLeft_toLeftOf="parent" 
       app:layout_constraintTop_toBottomOf="@+id/number_history"/> 

      <TextView 
       android:id="@+id/tv_followers" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/tv_followers" 
       app:layout_constraintLeft_toLeftOf="@+id/tv_history" 
       app:layout_constraintRight_toRightOf="@+id/tv_following" 
       app:layout_constraintTop_toBottomOf="@+id/number_followers"/> 

      <TextView 
       android:id="@+id/tv_following" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginEnd="40dp" 
       android:layout_marginRight="40dp" 
       android:text="@string/tv_following" 
       app:layout_constraintRight_toRightOf="parent" 
       app:layout_constraintTop_toBottomOf="@+id/number_following"/> 

      <TextView 
       android:id="@+id/number_history" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="20dp" 
       android:text="@string/test_history" 
       android:textStyle="bold" 
       app:layout_constraintEnd_toEndOf="@id/tv_history" 
       app:layout_constraintLeft_toLeftOf="parent" 
       app:layout_constraintStart_toStartOf="@id/tv_history" 
       app:layout_constraintTop_toBottomOf="@+id/view"/> 

      <TextView 
       android:id="@+id/number_followers" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="20dp" 
       android:text="@string/test_followers" 
       android:textStyle="bold" 
       app:layout_constraintLeft_toLeftOf="@+id/number_history" 
       app:layout_constraintRight_toRightOf="@+id/number_following" 
       app:layout_constraintTop_toBottomOf="@+id/view"/> 

      <TextView 
       android:id="@+id/number_following" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="20dp" 
       android:text="@string/test_following" 
       android:textStyle="bold" 
       app:layout_constraintEnd_toEndOf="@id/tv_following" 
       app:layout_constraintRight_toRightOf="parent" 
       app:layout_constraintStart_toStartOf="@id/tv_following" 
       app:layout_constraintTop_toBottomOf="@+id/view"/> 


     </android.support.constraint.ConstraintLayout> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv_grid" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="none" 
     android:visibility="visible" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

</android.support.design.widget.CoordinatorLayout> 

+0

Selon ma recommandation, initialisez un nouvel objet adaptateur avec la disposition requise en cliquant sur le bouton. –

+0

@RahulSharma mais alors comment aurais-je encore le 'header'? – Esteban

+0

ajouter l'en-tête requis à la nouvelle carte comme vous le faites maintenant –

Répondre

1

Modifié:

Si vous avez besoin de conception instagram exacte, s'il vous plaît vérifier cette Sample:

Lorsque vous cliquez sur le bouton onglet , il suffit d'utiliser hide et show vi ew et mettre le gestionnaire de disposition séparée pour les deux.

private boolean gridClick = false; 


    case R.id.list_click:      

       if(listClick) {     // Check whether the tab is already clicked or not 

        Log.e("AlreadyClicked", "Test"); 

       } else { 

        Log.e("ClickedFirstTime", "Test"); 

        loadPost(); 

        ivGrid.setVisibility(View.GONE);  // Hiding grid recyclerview 
        ivList.setVisibility(View.VISIBLE); // showing list recyclerview 

        rvGrid.setVisibility(View.GONE);  // Make grid recyclerview as gone 
        recyclerList.setVisibility(View.VISIBLE); // make listview as visible 



        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);  // Use separate layoutmanager for list recyclerview 

        recyclerList.setLayoutManager(mLayoutManager); 
        recyclerList.setItemAnimator(new DefaultItemAnimator()); 
        recyclerList.setAdapter(friendsProfileUserPostitemsAdapter); 

        listClick = true; 


       } 

       break; 
+0

Hmm Je ne peux pas accéder à ces listes car elles sont dans des classeurs différents. J'ai besoin de cacher/montrer les éléments du second classeur dans le premier en fonction de votre solution. – Esteban

+0

@Esteban J'ai déjà fait des dessins Instagram.Vous pouvez simplement faire avec 4 ou 5 boutons en activité unique.Juste cacher et afficher les vues en fonction de cela.Vous devez utiliser la disposition du coordonnateur utilisateur comme [this] (http: // stackoverflow. com/A/40182035/3960700). N'utilisez jamais la vue déroulante imbriquée. Son mauvais moyen de faire dans recyclerview. – Steve

+0

@Esteban vérifier mon post édité.Lorsque vous exécutez cet échantillon, vous pouvez obtenir une identification claire. – Steve

1

Je pense que vous avez fait une mauvaise implémentation. Il n'est pas nécessaire d'ajouter TabLayout dans l'élément RecyclerView.

Code Vous devriez être comme ça

<android.support.design.widget.CoordinatorLayout> 
    <android.support.design.widget.AppBarLayout> 
      <android.support.design.widget.CollapsingToolbarLayout> 

       <YourHeaderLayout /> 
       <android.support.design.widget.TabLayout />    

      </android.support.design.widget.CollapsingToolbarLayout> 
    </android.support.design.widget.AppBarLayout> 

    <RecyclerView /> 
    <!-- OR --> 
    <ViewPager /> 


</android.support.design.widget.CoordinatorLayout> 

ici Si vous affichez RecyclerView vous besoin de changer LayoutManager sur la presse Tab. Ou vous pouvez placer deux RecyclerView avec List and Grid dans ViewPager.

+0

Y at-il un moyen de le faire sans avoir le' CollapsingToolbarLayout? 'J'ai besoin du contenu pour faire défiler -able, quelque chose comme la page de profil utilisateur Instagram – Esteban

+0

Vous pouvez utiliser AppBarLayout sans CollapsingToolbarLayout.Et pour le défilement, vous pouvez vous android.support.v4.widget.NestedScrollView –

+0

@Esteban ne reçoit pas.Que vous voulez dire sur le défilement des en-têtes ? –