【问题标题】:RecyclerView inside ViewPager - scroll to last position shows only upper part of item viewViewPager 内的 RecyclerView - 滚动到最后一个位置仅显示项目视图的上部
【发布时间】:2019-10-20 15:42:52
【问题描述】:

我有一个带有布局的活动:

<?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 布局的 Fragment,将从上方膨胀到一个 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)

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

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

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

【问题讨论】:

  • 我建议添加当前和预期行为的屏幕截图。
  • 编辑和添加的图片
  • 阅读文档。 RecyclerView.scrollToPosition 是一个调用 RecyclerView.LayoutManager.scrollToPosition 的便捷方法。 developer.android.com/reference/android/support/v7/widget/… "滚动到指定位置。项目在屏幕上的实际位置取决于 LayoutManager 的实现。"这意味着,您实际上已经完成了您设定的目标,您已经滚动到那个位置。现在您的下一个任务是获取视图高度并滚动该高度以达到您想要的结果。

标签: android android-viewpager android-recyclerview


【解决方案1】:

删除这一行:

android:fitsSystemWindows="true"

【讨论】:

    【解决方案2】:

    我建议你在最后一个位置添加一个空白项。 以下是我的做法。
    第 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      相关资源
      最近更新 更多