6

findLastCompletelyVisibleItemPosition()RecyclerView で最後に表示されるアイテムを特定するために使用しています。

レイアウトの設定方法のコード スニペットを次に示します。

    mRecyclerView.setHasFixedSize(true);
    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext());
    mRecyclerView.setLayoutManager(mLayoutManager);

レイアウト XML:

<android.support.v4.widget.SwipeRefreshLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

    <android.support.v7.widget.RecyclerView
        android:id="@+id/message_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        android:paddingBottom="@dimen/footer_progress_bar"
        android:paddingTop="16dp"
        android:scrollbars="vertical" />

    <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_gravity="center"
        android:visibility="gone" />

    <ProgressBar
        android:id="@+id/footer_progress_bar"
        android:layout_width="@dimen/footer_progress_bar"
        android:layout_height="@dimen/footer_progress_bar"
        android:layout_gravity="center|bottom"
        android:visibility="gone" />

</FrameLayout>
</android.support.v4.widget.SwipeRefreshLayout>

縦向きモードでは、これは正常に機能し、常に正しい位置に戻ります。

ただし、ランドスケープ モードでは、返される位置は常に -1 です。

私の質問は:

なぜこれが起こるのか誰か知っていますか?

これをオーバーライドして正しい位置を返すにはどうすればよいですか?

または、ランドスケープの最後のアイテムの正しい位置を取得するための別のソリューションを誰かが推奨できますか?

4

4 に答える 4

0

で初期化してみましたか?if (savedInstanceState == null)

if (savedInstanceState == null){
    mRecyclerView.setHasFixedSize(true);
    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext());
    mRecyclerView.setLayoutManager(mLayoutManager);
} else {

    // Do nothing   
}
于 2016-05-09T11:04:04.403 に答える