【问题标题】:How to use recycler view and relative layout in a screen in android studio如何在 android studio 的屏幕中使用回收站视图和相关布局
【发布时间】:2019-09-30 06:36:47
【问题描述】:

我有一个回收站视图和一个回收站视图下方的相对布局。我的相对布局由三个文本视图组成。我的回收站视图由三个文本视图和一个按钮组成。我的问题是回收器视图是单独滚动的,并且相对布局中的文本视图是固定的。但我希望两者都被滚动,这意味着在滚动屏幕滚动时应该同时针对回收站视图和相对布局进行滚动,但不能单独进行。滚动我的相对布局时,应将其附加到回收站视图的末尾。我为此进行了很多搜索,但没有搜索结果。所以,结束了,请任何人帮助我。

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    您有 2 个选项,第一个(更好的一个)是创建页脚 ViewHolder 并将其添加到 RecyclerView 作为适配器中的最后一项。 或者您可以简单地将视图包装在垂直 LinearLayout 中,然后将其包装在 NestedScrollView 中,如下所示:

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
    
            <ImageView
                android:id="@+id/image"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:scaleType="centerCrop" />
    
            <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:nestedScrollingEnabled="false" />
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
    

    【讨论】:

    • 值得注意的是,当您将 RecyclerView 设置为 android:layout_height="wrap_content" 时,RecyclerView 将不再实际回收其视图,而是一次将它们全部膨胀。如果您有少量数据,则 NestedScrollView 路由设置起来要简单得多,但对于长列表就不能很好地扩展。
    【解决方案2】:

    为了让您的 RelativeLayout 与 RecyclerView 的内容一起滚动,您需要将具有静态内容的 RelativeLayout 添加到您的 Adapter 迭代列表的末尾。然后,您将覆盖适配器中的getItemViewType,并为 RecyclerView 中的数据返回一个类型 ID,为页脚 RelativeLayout 返回另一个类型 ID。然后在onCreateViewHolder 中,您将使用视图类型来扩充正确类型的视图(一种绑定您的数据或另一种显示您的RelativeLayout)。

    这个过程可能非常耗费人力。您也可以考虑使用 Epoxy 之类的库来帮助在 RecyclerView 中创建页脚视图。

    【讨论】:

      【解决方案3】:

      您可以在不同布局中添加带有文本视图的视图,并将其作为最后一个元素添加到您的回收站。然后检查 getItemViewType 中的位置,以及它是否最后返回 RecyclerAdapter 中的页脚类型。

      private static final int FOOTER = 1;
      private static final int CHILD = 2;
      // inflates the row layout from xml when needed
      @Override
      public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
          if(viewType == CHILD){
              View view = mInflater.inflate(R.layout.list_item, parent, false);
              return new ViewHolder(view);
          }
          else if(viewType == FOOTER ){
              View view = mInflater.inflate(R.layout.relative, parent, false);
              return new ViewHolder(view);
          }
          return null;
      }
      
      
      @Override
      public int getItemViewType(int position) {
          if (position == getItemCount() - 1) {
              return FOOTER;
          } else {
              return CHILD;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-21
        • 2018-04-15
        • 1970-01-01
        • 1970-01-01
        • 2020-12-12
        • 2017-02-27
        相关资源
        最近更新 更多