多个 RecyclerView 不在同一个片段中工作

Posted

技术标签:

【中文标题】多个 RecyclerView 不在同一个片段中工作【英文标题】:Multiple RecyclerView not working in same Fragment 【发布时间】:2017-06-19 02:14:04 【问题描述】:

我的Fragment 中有两个RecyclerView

 <LinearLayout                  
             android:layout_
             android:layout_ 
             android:orientation="vertical"
             android:background="#E6E6E6">  
<RelativeLayout
            android:layout_
            android:layout_ >
      <TextView
        android:id="@+id/textview"
        android:layout_
        android:layout_
        android:textSize="20sp"
        android:textColor="#000"
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        android:gravity="left"
        android:text="Trending"
        />
    <android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_
    android:layout_
    android:scrollbars="none"
    android:layout_below="@+id/textview"
   />

    <TextView
        android:id="@+id/popular_textview"
        android:layout_
        android:layout_
        android:textSize="20sp"
        android:textColor="#000"
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        android:gravity="left"
        android:text="Popular"
        android:layout_below="@+id/recycler_view"
        android:layout_marginTop="200dip"
        />
    <android.support.v7.widget.RecyclerView
    android:id="@+id/popular_recycler_view"
    android:layout_
    android:layout_
    android:scrollbars="none" 
    android:layout_below="@+id/popular_textview"/> 
 </RelativeLayout>

但这只是第一个 RecyclerView 工作。第二个是不可见的。 我的Fragment 代码是这样的:

private void populatRecyclerView(ArrayList<HashMap<String, String>> imageList) 

    ArrayList<Data_Model> arrayList = new ArrayList<>();
    for (int i = 0; i < imageList.size(); i++) 
        HashMap<String, String> vector = imageList.get(i);
        category = vector.get("deal_category");
        if (category.equalsIgnoreCase("17")) 
            String imageurl = vector.get("deal_thumbnail");
            String title = vector.get("title");
            Uri uri = Uri.parse(imageurl);
            String filename = uri.getLastPathSegment();
            arrayList.add(new Data_Model(title, filename));
            RecyclerView_Adapter adapter = new RecyclerView_Adapter(getActivity(), arrayList);
            recyclerView.setAdapter(adapter);// first set adapter on recyclerview
            adapter.notifyDataSetChanged();// Notify the adapter
         else 
            String imageurl = vector.get("deal_thumbnail");
            String title = vector.get("title");
            Uri uri = Uri.parse(imageurl);
            String filename = uri.getLastPathSegment();
            arrayList.add(new Data_Model(title, filename));

            RecyclerView_Popular_Adapter popular_adapter = new RecyclerView_Popular_Adapter(getActivity(), arrayList);
            popular_recyclerView.setAdapter(popular_adapter);// second set adapter on recyclerview
            popular_adapter.notifyDataSetChanged();// Notify the adapter
        
    

甚至第二个TextView 也没有出现。我在评论中指定了第一个和第二个适配器。那么如何让第二个RecyclerView 也可见呢?

【问题讨论】:

由于您已指定条件,因此在单个实例中只有一个可见(这意味着您的 if(true) 始终) 在某些情况下它会进入 else 循环。我已经交叉检查了那个。 尝试修复 Recyclerview 的高度。如果您有条件地填充 recyclerview 为什么需要其中两个? 第一个是自动滚动条,第二个不是自动滚动条。所以我需要两个不同的回收视图 【参考方案1】:

您不能在 RelativeLayout 的子代上使用 layout_weight 。您的父视图应位于LinearLayout 下,如下所示;

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical">

    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_weight="1">

        <TextView
            android:id="@+id/textview"
            android:layout_
            android:layout_
            android:gravity="left"
            android:paddingBottom="8dp"
            android:paddingTop="8dp"
            android:text="Trending"
            android:textColor="#000"
            android:textSize="20sp" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_
            android:layout_
            android:layout_below="@+id/textview"
            android:scrollbars="none" />

    </RelativeLayout>

    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_weight="1">

        <TextView
            android:id="@+id/popular_textview"
            android:layout_
            android:layout_
            android:gravity="left"
            android:paddingBottom="8dp"
            android:paddingTop="8dp"
            android:text="Popular"
            android:textColor="#000"
            android:textSize="20sp" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/popular_recycler_view"
            android:layout_
            android:layout_
            android:layout_below="@+id/popular_textview"
            android:scrollbars="none" />

    </RelativeLayout>

</LinearLayout>

希望对你有帮助!

【讨论】:

是的,我尝试删除 layout_weight 仍然无法正常工作。 这还不够,您应该按组分隔您的 RecylerViews 并为此组父级设置 layout_weight。 我现在面临的另一个问题。此视图不可滚动。我尝试使用 但仍然无法正常工作。你能帮帮我吗? 如果有效,您应该批准并完成这篇文章。还有一个问题,你应该看看这篇文章; ***.com/questions/16515879/… 这个链接解决方案对我不起作用。我已经发布了单独的滚动问题。

以上是关于多个 RecyclerView 不在同一个片段中工作的主要内容,如果未能解决你的问题,请参考以下文章

CardView 不在披萨片段中显示图片

在 ViewPager 的多个选项卡中使用单个片段

如何从 recyclerview 片段传递到另一个 recyclerview 片段

我无法从另一个带有 recyclerview.adaper 的片段中打开带有 recyclerview.adapter 的片段

如何在单击 RecyclerView 项目时从一个片段移动到另一个片段

更新片段中的 RecyclerView