同一个Scrollview中有两个RecyclerView,一个不显示内容

我在同一个RecyclerView中有两个ScrollView时遇到了问题(我也对nestestScrollView进行了尝试)。在ScrollView内,我还有其他一些View对象,这些对象形成了该片段的一种“标题部分”。然后,我想显示一个RecyclerView的水平列表,最后,在水平列表上方,显示其他RecyclerView的垂直列表。但是,只有水平的一个才能正确显示。即使垂直行的Adapter已使用某些对象正确初始化,但在运行应用程序时,垂直列表仍为空。我认为这是与我的布局有关的问题。

这是我的.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/profile_coordinator"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".HomeFragment">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="20dp">

            <!-- Here I have some other views (ImageView,TextView,etc.) -->


        </RelativeLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="10dp">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/active_promos"
                android:textStyle="bold"
                android:textColor="@color/colorPrimary"
                android:textSize="18sp"
                android:layout_marginBottom="10sp"/>

            <!-- Horizontal List of RecyclerView -->
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/promo_recyclerview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                android:layout_marginBottom="20sp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/news"
                android:textStyle="bold"
                android:textColor="@color/colorPrimary"
                android:textSize="18sp"
                android:layout_marginBottom="10sp"/>

            <!-- Vertical List of RecyclerView -->
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/news_recyclerview"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </LinearLayout>

    </LinearLayout>

</ScrollView>

由于要显示的对象是相同的(但语义不同),所以我使用相同的Adapter类,该类根据要显示的对象的类型加载两个不同的xml布局。

这是Adapter.java

public class NewsAdapter extends RecyclerView.Adapter {

private List<NewsPromotion> newsPromotions;
private boolean promos;

public NewsAdapter(List<NewsPromotion> newsPromotions,boolean promos) {
    this.newsPromotions = newsPromotions;
    this.promos = promos;
}

public void setData(List<NewsPromotion> newsPromotions){
    this.newsPromotions = newsPromotions;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {

    RecyclerView.ViewHolder viewHolder;

    if(promos) {
        View mView = LayoutInflater.from(parent.getcontext()).inflate(R.layout.promo_recyclerview_item,parent,false);

        viewHolder = new PromoViewHolder(mView);

    }else {
        View mView = LayoutInflater.from(parent.getcontext()).inflate(R.layout.recyclerview_item_row,false);

        viewHolder = new NewsViewHolder(mView);
    }

    return viewHolder;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder,int position) {

    Log.d("Adapter",newsPromotions.get(position).title);

    if(promos){
        PromoViewHolder viewHolder = (PromoViewHolder) holder;
        Picasso.get().load(RestClient.BASE_IMAGE_URL + newsPromotions.get(position).image).into(viewHolder.mImage);
    }else {


        NewsViewHolder viewHolder = (NewsViewHolder) holder;

        Picasso.get().load(RestClient.BASE_IMAGE_URL + newsPromotions.get(position).image).into(viewHolder.mImage);
        viewHolder.mTitle.setText(newsPromotions.get(position).title);
        viewHolder.mDescription.setText(newsPromotions.get(position).content);
    }
}

@Override
public int getItemCount() {
    return newsPromotions.size();
}

public class NewsViewHolder extends RecyclerView.ViewHolder {

    ImageView mImage;
    TextView mTitle;
    TextView mDescription;

    private NewsViewHolder(View itemView) {
        super(itemView);

        mImage = itemView.findViewById(R.id.ivImage);
        mTitle = itemView.findViewById(R.id.tvTitle);
        mDescription = itemView.findViewById(R.id.tvDescription);
    }
}

public class PromoViewHolder extends RecyclerView.ViewHolder {

    ImageView mImage;

    private PromoViewHolder(View itemView) {
        super(itemView);

        mImage = itemView.findViewById(R.id.ivImage);
    }
}

}

以下是我如何在Fragment中初始化两个适配器的方法:

RecyclerView promoRecycleView = activity.findViewById(R.id.promo_recyclerview);
promoAdapter = new NewsAdapter(new ArrayList<NewsPromotion>(),true);
promoRecycleView.setadapter(promoAdapter);

RecyclerView newsRecycleView = activity.findViewById(R.id.news_recyclerview);
newsAdapter = new NewsAdapter(new ArrayList<NewsPromotion>(),false);
newsRecycleView.setadapter(newsAdapter);

最后,这就是我将对象发送到适配器的方式:

promoAdapter.setData(promos);
promoAdapter.notifyDataSetChanged();

newsAdapter.setData(news);
newsAdapter.notifyDataSetChanged();
miner2007 回答:同一个Scrollview中有两个RecyclerView,一个不显示内容

如果您要查看RecyclerView上的文档,将会看到需要指定列表的大小。 RecyclerView没有自动换行内容,因为它是动态的窗口小部件。因此,您需要将实现与下一个类似。

<?xml version="1.0" encoding="utf-8"?>
<NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/profile_coordinator"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".HomeFragment">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="20dp">

            <!-- Here I have some other views (ImageView,TextView,etc.) -->


        </RelativeLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="10dp">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/active_promos"
                android:textStyle="bold"
                android:textColor="@color/colorPrimary"
                android:textSize="18sp"
                android:layout_marginBottom="10sp"/>

            <!-- Horizontal List of RecyclerView -->
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/promo_recyclerview"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:orientation="horizontal"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                android:layout_marginBottom="20sp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/news"
                android:textStyle="bold"
                android:textColor="@color/colorPrimary"
                android:textSize="18sp"
                android:layout_marginBottom="10sp"/>

            <!-- Vertical List of RecyclerView -->
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/news_recyclerview"
                android:layout_width="match_parent"
                android:layout_height="500dp" />
        </LinearLayout>

    </LinearLayout>

</ScrollView>
,

请发布您的适配器和item_layout。因为您给定的布局非常适合我。

,

enter image description here

您的布局没有问题,我已经在myAppliaction中运行,在适配器中存在一些问题,请发布/粘贴您的活动和适配器代码。

本文链接:https://www.f2er.com/3149962.html

大家都在问