在RecyclerView上设置RelativeLayout

问题描述 投票:0回答:3

我想在RecyclerView上设置RelativeLayout。 (我已尝试使用listView也无法正常工作,我们不希望将Framelayout放在首位。)

我不想要替代品,我想理解为什么它不能在逻辑上工作 - 它与其他布局合作,为什么不使用recyclerview。

1)XML文件(RecyclerVIew)

<android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager" />

2)XML文件(RelativeLayout)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/viewcenter"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="16dp"
        android:id="@+id/imgNoDataFound"
        android:src="@drawable/no_data_found" />


</RelativeLayout>

3)Java代码

RecyclerView recyclerView = findViewById(R.id.recycler);
     View view = LayoutInflater.from(context).inflate(com.commonlib.R.layout.no_data_found,  recyclerView);

它不起作用 - 意味着它不会通过recyclerview夸大我的相对布局。

注意:它也不能与ListView一起使用。我不想采用FrameLayout。

android android-layout android-recyclerview android-relativelayout
3个回答
0
投票

你试图在这里给RelativeLayout里面的RecyclerView充气。如果你想在它上面充气,你必须在Recycler的父母内部充气,如下所示:

RecyclerView recyclerView = findViewById(R.id.recycler);
View view = LayoutInflater.from(context).inflate(com.commonlib.R.layout.no_data_found,  recyclerView.getParent());

1
投票

您可以按照以下方法:

首先,将RelativeLayout添加到具有RecyclerView的相同xml文件中,并将其可见性设置为已消失。

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layoutManager="android.support.v7.widget.LinearLayoutManager" />

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:visibility="gone" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/viewcenter"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="16dp"
        android:id="@+id/imgNoDataFound"
        android:src="@drawable/no_data_found" />

</RelativeLayout>

然后,当没有数据时,你可以看到RelativeLayout'可见。在活动类中:

if(noData){   //Or list.isEmpty() or something
    relativeLayout.setVisibility(View.VISIBLE);
}

您仍然可以将recyclerView替换为以下内容;

View recyclerView = findViewById(R.id.recyclerView);
ViewGroup parent = (ViewGroup) recyclerView.getParent();
int index = parent.indexOfChild(recyclerView);
parent.removeView(recyclerView);
View myInflatedView = getLayoutInflater().inflate(R.layout.no_data_found, parent, false);
parent.addView(myInflatedView, index);

0
投票

对于错误视图,您可以将相对布局和errorView包装在相对布局中。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.RecyclerView
    android:id="@+id/rv_fragmentCardStack"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clipToPadding="false"
    android:dividerHeight="0dp"
    android:drawSelectorOnTop="false" />

<include
    android:id="@+id/error_view"
    layout="@layout/view_error"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:visibility="gone" />

</RelativeLayout>

view_error.xml可以是。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
    android:id="@+id/img_errorImageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
<TextView
    android:id="@+id/txt_errorMessage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:gravity="center"
    android:visibility="gone" />
<Button
    android:id="@+id/btn_Error_Retry"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="Retry"
    android:textAllCaps="false" />
</RelativeLayout>

在没有数据或任何连接错误时,使用正确的消息可以看到错误视图。

要在列表视图中添加空视图,您可以使用下面的代码。

  View view = LayoutInflater.from(context).inflate(R.layout.yourlayoutId,null);
    listView.setEmptyView(view);
© www.soinside.com 2019 - 2024. All rights reserved.