显示视图时它与recyclerview中的项目重叠?

时间:2017-07-27 04:51:13

标签: android

我有一个应用程序,其中我想在recyclerview中显示来自服务器的dataList,当我滚动到recyclerView的末尾想要在底部显示进度条,并且我在recyclerview之间添加了一个AdsView但它重叠了recyclerView的项目在指定的索引上。

代码: -

 @Override
public int getItemViewType(int position) {
    if (contacts.get(position) == null)
        return VIEW_TYPE_LOADING;
    else if (position % 5 == 0)
        return AD_VIEW;
    else {
        return VIEW_TYPE_ITEM;
    }
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = null;
    if (viewType == AD_VIEW) {
        View adView = LayoutInflater.from(parent.getContext()).inflate(R.layout.add, parent, false);
        return new AdView(adView);
    } else if (viewType == VIEW_TYPE_ITEM) {
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler_view_row, parent, false);
        return new UserViewHolder(view);
    } else if (viewType == VIEW_TYPE_LOADING) {
        view = LayoutInflater.from(activity).inflate(R.layout.item_loading, parent, false);
        return new LoadingViewHolder(view);
    }
    return null;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    if (holder instanceof AdView) {
        AdView adView = (AdView) holder;
        adView.textView.setText("Ads");
    } else if (holder instanceof UserViewHolder) {
        Contact contact = contacts.get(position);
        UserViewHolder userViewHolder = (UserViewHolder) holder;
        userViewHolder.phone.setText(contact.getEmail());
        userViewHolder.email.setText(contact.getPhone());
    } else if (holder instanceof LoadingViewHolder) {
        LoadingViewHolder loadingViewHolder = (LoadingViewHolder) holder;
        loadingViewHolder.progressBar.setIndeterminate(true);
    }
}

@Override
public int getItemCount() {
    return contacts == null ? 0 : contacts.size();
}

xml main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

项目视图的xml

<android.support.v7.widget.CardView 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardUseCompatPadding="true">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?android:selectableItemBackground"
    android:padding="10dp">

    <TextView
        android:id="@+id/txt_email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@android:color/black"
        android:textSize="16sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/txt_phone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/txt_email"
        android:textColor="@android:color/black"
        android:textSize="12sp" />
</RelativeLayout>

xml of loadingview: -

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

<ProgressBar
    android:id="@+id/progressBar1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal" />

1 个答案:

答案 0 :(得分:0)

需要您的XML才能让我们了解元素的排序方式以及相互依赖的方式。 但是,在发布之前,您可以将recyclerView放在RelativeLayout中,并将其设置为重叠的视图下方(或上方)。 但请注意,两个视图(回收器和重叠的vjew或回收器的布局以及重叠视图)应位于相同的RelativeLayout下,以便它们可以具有位置依赖性。