2017-02-13 6 views
0

Я занимаюсь серфингом много сообщений, но не смог получить тот, который мне нужен. У меня есть LinearLayout с RecyclerView, и я хочу, чтобы и прокрутка. Теперь LinearLayout исправлен, и RecyclerView является единственным, который прокручивается. Я пробовал с nestedscrollview, но не смог заставить его работать. По какой-то причине recyclerview.adapter разбивается с использованием nestedscrollview. Есть идеи? кстати: Я развиваю в Xamarin AndroidLinearLayout и RecyclerView не будут прокручиваться вместе

Это мой Компоновка

<LinearLayout 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     ... 
    </LinearLayout> 
    <FrameLayout 
     android:id="@+id/navigation" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

Затем я загружал фрагмент в framelayout, макет которого является:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<ProgressBar 
    android:id="@+id/spinner" 
    style="?android:attr/progressBarStyleLarge" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" /> 
<android.support.v4.widget.SwipeRefreshLayout 
    android:id="@+id/refresher" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:scrollbars="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
</android.support.v4.widget.SwipeRefreshLayout> 
<TextView 
    android:id="@+id/empty_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
</LinearLayout> 

ответ

0

LinearLayouts сами по себе не прокрутки, они просто для простой организации одного взгляда за другим за другим линейным способом. Если вы хотите получить прокрутку, вам нужно вложить ее в ScrollView.

Учитывая то, что вы пытаетесь выполнить, я не знаю, что вложенное RecyclerView внутри ScrollView будет работать. (Я не подтвердил это)

Какое поведение вы ищете с помощью LinearLayout? Предполагается ли он содержать верхние и нижние колонтитулы? Если это так, вам может быть лучше обеспечено создание уникальных ViewHolders для вашего RecyclerView (т. Е. Один для вашего заголовка, один для вашего нижнего колонтитула и третий для вашего обычного контента). Затем ваш адаптер определяет тип отображения ViewHolder на основе его индекса. (например, 0 -> Заголовок, n + 2 -> Нижний колонтитул, 1: n-1 -> Содержание (смещение на 1))

Если вы просто ищете статический заголовок (то есть тот, который не прокручивается с остальным содержанием, вы можете добиться того, что довольно легко:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="5"> 

    <!-- Replace this with your header view --> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:text="Your Header" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="4" > 

     <android.support.v4.widget.SwipeRefreshLayout 
      android:id="@+id/refresher" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recyclerView" 
       android:scrollbars="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="fill_parent" /> 
     </android.support.v4.widget.SwipeRefreshLayout> 

     <ProgressBar 
      android:id="@+id/spinner" 
      style="?android:attr/progressBarStyleLarge" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" /> 
    </RelativeLayout> 
</LinearLayout> 

Это даст вам представление заголовка, который будет занимать 1/5th от общей высоты вмещающего открывающегося вида RecyclerView (включая его содержащий. просмотр и индикатор выполнения) находятся в представлении, которое будет охватывать оставшиеся 4/5-й от общей высоты содержащего представления.

+0

Это заголовок, но, учитывая мое решение, это не лучшая идея сделать заголовок Viewholde r для рециркуляции. Я использовал LinearLayout для организации представлений. Семантически это заголовок. Вы рекомендуете менять LinearLayout на другой макет? –

+0

Всё зависит. Когда вы прокручиваете, вы хотите, чтобы заголовок исчез? Или вы хотите, чтобы он всегда присутствовал? Вы хотите, чтобы нижний колонтитул появлялся только при прокрутке вниз? Вы можете сохранить LinearLayout * без * ScrollView, вставить туда заголовок, и только второй элемент будет RecyclerView (который будет прокручиваться сам по себе). Почему определение Header ViewHolders не является идеальным решением для вас? – themarshal

+0

Предположим, я хочу, чтобы это было как первый элемент. Я не хочу, чтобы он исчезал, просто чтобы быть наверху. Определение заголовка ViewHolders не является идеальным, потому что recyclerview - это компонент, который я использую в других представлениях, а в других я не хочу заголовок. Это сложно, если вы не знаете решения, но поверьте мне, лучше сделать это раздельно. У меня нет нижнего колонтитула, только заголовок. Я не понимаю решение, которое вы даете мне, у вас есть пример/учебник? Спасибо! –

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