PagedList.Config loads list in the middle with recycleview

Viewed 68

My RecyclerView loads in the middle of the list instead of the most top item first. The list should load the topmost item. In this case, it's the "latest" post. Which I have set to the reverse layout to true and that works.

My RecyclerView

<FrameLayout 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"
    tools:viewBindingIgnore="true">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/postsList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="false"
        android:padding="5dp"
        tools:listitem="@layout/post_item" />

</FrameLayout>

My Post list fragment

 // Set up FirebaseRecyclerAdapter with the Query
        val postsQuery = database.child(Globals().POSTS_ROOT_PATH)

        // This configuration comes from the Paging Support Library
        // https://developer.android.com/reference/androidx/paging/PagedList.Config
        val config = PagedList.Config.Builder()
            .setEnablePlaceholders(false)
            .setPrefetchDistance(5)
            .setPageSize(10)
            .build()

        // The options for the adapter combine the paging configuration with query information
        // and application-specific options for lifecycle, etc.
        val options = DatabasePagingOptions.Builder<Post>()
            .setLifecycleOwner(this)
            .setQuery(postsQuery, config, Post::class.java)
            .build()

        adapter = object : FirebaseRecyclerPagingAdapter<Post, PostViewHolder>(options) {

            override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): PostViewHolder {
                val inflater = LayoutInflater.from(viewGroup.context)

                return PostViewHolder(inflater.inflate(R.layout.post_item, viewGroup, false))
            }

            override fun onBindViewHolder(viewHolder: PostViewHolder, position: Int, model: Post) {
                val postRef = getRef(position)
                // Set click listener for the whole post view
                val postKey = postRef.key
//                Log.d("PostListFragment", "post key id is: " + postKey)
                viewHolder.itemView.setOnClickListener {
                    // Launch PostDetailActivity
                    val intent = Intent(activity, PostDetailActivity::class.java)
                    intent.putExtra(PostDetailActivity.EXTRA_POST_KEY, postKey)
                    startActivity(intent)
                }

  
            }

            override fun onLoadingStateChanged(state: LoadingState) {
                when (state) {
                    LoadingState.LOADING_INITIAL -> {
                        Log.d(TAG, "Initial data loading")
                    }
                    LoadingState.LOADING_MORE -> {

                    }
                    LoadingState.LOADED -> {

                    }
                    LoadingState.FINISHED -> {
                        Log.d(TAG, "All data loaded.")
                    }
                    LoadingState.ERROR -> {
                        Log.d(TAG, "Error occured while loading data")
                    }
                }
            }

            override fun onError(databaseError: DatabaseError) {
                super.onError(databaseError)
                databaseError.toException().printStackTrace()
            }
        }

        // Set up Layout Manager, reverse layout
        manager = LinearLayoutManager(activity)
        manager.reverseLayout = true
        manager.stackFromEnd = true
        recyclerList.layoutManager = manager

        recyclerList.adapter = adapter
    }

When I set the setPageSize() to a very large number then it loads the most top item. What do I need to do so this always loads the most top list item first?

Thanks

Edit: post_item.xml

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    tools:viewBindingIgnore="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <include
            android:id="@+id/postTextLayout"
            layout="@layout/post_text_include"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginLeft="2dp"
            android:layout_marginTop="2dp"
            android:layout_marginStart="2dp" />

        <include
            android:id="@+id/postThumbnailImg"
            layout="@layout/post_video_thumbnail_include"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/postTextLayout"
            android:layout_alignParentStart="true" />

        <include
            android:id="@+id/postAuthorLayout"
            layout="@layout/post_author_thumbnail_include"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/postThumbnailImg"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    </RelativeLayout>

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

Sub layouts

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical">

    <TextView
        android:id="@+id/postTitle"
        style="@style/TextAppearance.AppCompat.Medium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:maxLines="1"
        android:textStyle="bold"
        android:textColor="@color/colorPrimaryDark"
        tools:text="My First Post"
        android:paddingStart="5dp"
        android:paddingEnd="5dp" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
    tools:viewBindingIgnore="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ImageView
        android:id="@+id/videoThumbnailImg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/main_background" />
    />

    <RelativeLayout
        android:layout_height="match_parent"
        android:layout_width="match_parent">

        <ImageView
            android:id="@+id/playButton"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:scaleType="centerCrop"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@drawable/ic_baseline_play_arrow_24" />
    </RelativeLayout>
</FrameLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:gravity="center_vertical"
    android:orientation="horizontal">

    <androidx.cardview.widget.CardView
        android:layout_width="40dp"
        android:layout_height="40dp"
        app:cardCornerRadius="20dp">

        <ImageView
            android:id="@+id/postAuthorPhoto"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            android:src="@drawable/ic_person_outline_40" />

    </androidx.cardview.widget.CardView>

    <TextView
        android:id="@+id/postAuthor"
        style="@style/Base.TextAppearance.AppCompat.Small"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:gravity="center_vertical"
        android:textColor="@color/colorPrimaryDark"
        tools:text="someauthor@email.com" />

</LinearLayout>
1 Answers

You need to set height wrap_content rather than match_parent for sublayouts.

Related