简体   繁体   English

交错的gridview在android中无法正常工作

[英]Staggered gridview not working properly in android

I am using staggered gridview which is placed inside NestedScrollview.我正在使用放置在 NestedScrollview 内的交错网格视图。 I don't know y it is coming one below the other when loading for the first time(if image cache is not there).我不知道它在第一次加载时是否低于另一个(如果没有图像缓存)。 Is there any issue with staggered gridview?交错的gridview有什么问题吗? Or is it because of my layout it is coming like this.或者是因为我的布局它是这样的。 Anyone please help.任何人请帮忙。

图像有时会像一个在另一个下面。

My layout xml is as follows我的布局xml如下

    <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:expandedTitleTextAppearance="@android:color/transparent">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginStart="48dp"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleTextAppearance="@android:color/transparent">

            <ImageView
                android:id="@+id/backdrop"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scaleType="fitCenter"
                android:maxHeight="@dimen/detail_backdrop_maxheight"
                android:adjustViewBounds="true"
                app:layout_collapseMode="parallax"
                android:contentDescription="Top Image"/>

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                app:layout_collapseMode="pin"
                app:expandedTitleTextAppearance="@android:color/transparent"/>

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

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

            <com.hit.pretstreet.pretstreet.core.customview.TextViewPret
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/yellow"
            style="@style/textview_normal"
            android:id="@+id/tv_heading_photos"
            app:pret_typeface="@string/font_redvelvet_regular"/>

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/rv_images"
            android:layout_marginLeft="-2dp"
            android:layout_marginRight="-2dp"
            android:nestedScrollingEnabled="false"/>

        </LinearLayout>

    </android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

Note: I am loading images from server.注意:我正在从服务器加载图像。

Regards问候

At last I got the answer.最后我得到了答案。 It was because I have missed placeholder while loading images.这是因为我在加载图像时错过了占位符。

recycler_item.xml recycler_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@color/cardview_dark_background"
    tools:context=".MainActivity">

    <com.google.android.material.card.MaterialCardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardPreventCornerOverlap="false"
        android:theme="@style/Theme.MaterialComponents.DayNight"
        app:cardBackgroundColor="@color/cardview_shadow_start_color"
        app:cardUseCompatPadding="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <com.google.android.material.imageview.ShapeableImageView
                android:id="@+id/ivTemplateThumbnail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scaleType="fitCenter"
                android:adjustViewBounds="true"
                android:src="@mipmap/ic_launcher" />
                
            <TextView
                android:id="@+id/tvTemplateName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom|center_horizontal"
                android:fontFamily="sans-serif-black"
                android:text="Poster Maker"
                android:textSize="@dimen/_16ssp" />
        </LinearLayout>

    </com.google.android.material.card.MaterialCardView>


</LinearLayout>

Recyclerview回收者视图

   <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rvStaggered"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layoutManager="androidx.recyclerview.widget.StaggeredGridLayoutManager"
                app:spanCount="2"
                android:orientation="vertical"
                tools:itemCount="5"
                tools:listitem="@layout/item_staggered_main" />

Inside adapter_recyclerview > onbindviewholder at the time of set image in item imageview using glide use placeholder.在使用 glide 使用占位符在 item imageview 中设置图像时,在 adapter_recyclerview > onbindviewholder 内部。

  @Override
public void onBindViewHolder(@NonNull TemplateListAdapter.TemplateListItemViewHolder holder, int position) {

    Glide.with(mContext)
            .load(listTemplateData.get(position).getTemplateUrl()).placeholder(R.drawable.placeholdertemplate)
            .into(holder.ivTemplateThumbnail);
    holder.tvTemplateName.setText(listTemplateData.get(position).getTemplateName());

    holder.ivTemplateThumbnail.setOnClickListener(view -> {templateItemClick.onTemplateItemClick(position);});


}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM