ViewPager内的RecyclerView - 滚动到最后位置仅显示项目视图的上半部分

时间:2017-03-15 16:38:50

标签: android android-viewpager android-recyclerview

我有一个布局活动:

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.checkoins.app.checkoins.CountryTabActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/appbar_padding_top"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay">

        </android.support.v7.widget.Toolbar>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

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

    <android.support.v4.view.ViewPager
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_new_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end|bottom"
        android:layout_margin="@dimen/fab_margin"
        app:srcCompat="@android:drawable/ic_input_add"/>

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

还有一个带有RecyclerView布局的片段,它将从上面膨胀到一个viewpager中:

<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_coin_list_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

当我使用命令时:

mRecyclerView.scrollToPosition(mRecyclerView.getAdapter().getItemCount() -1)

它滚动到最后一个项目位置,但只显示该项目视图的一部分, Result - current behavior

我需要用手指滚动才能在屏幕上看到最后一项。 Desired behaviour

如何让它在代码中完整显示最后一项?

2 个答案:

答案 0 :(得分:0)

删除此行:

android:fitsSystemWindows="true"

答案 1 :(得分:0)

我建议您在最后一个位置添加一个空白项目。 下面是我的操作方法。
第1步

static class MyHolder extends RecyclerView.ViewHolder{
    View itemView;
    MyHolder(@NonNull View itemView) {
        this.itemView = itemView;
    }
}

第2步:

@Override
public int getItemCount() {
    // the data is just what you'll then put into your recyclerview items
    return data == null ? 0 : data.size() + 1;
}

步骤3:这也是最后一步。

@Override
public void onBindViewHolder(@NonNull MyHolder viewHolder, int position) {
    // This statement must be placed in top of current method
    if(position == data.size) {
        viewHolder.itemView.setVisibility(View.GONE);
        return;
    }
}