8

Android プロジェクトに、各ビュー内にメディア コンテンツを表示する recyclerview があります。私が達成しようとしているのは、上下にスクロールしながらメディアを再生/一時停止できることです。完全に見えるビューのアダプター位置を取得する必要があります。私はこのようなことをしています。

私のアクティビティフラグメントには、次のものがあります。

        layoutmanager = new LinearLayoutManager(Activity);

        adapter = new FeedAdapter(vid, userName, this.Context);

        feeditem.SetLayoutManager(layoutmanager);
        feeditem.SetAdapter(adapter);

        var onScrollListener = new XamarinRecyclerViewOnScrollListener(Activity, layoutmanager, adapter);

スクロール リスナー イベントは次のようになります。

public override void OnScrollStateChanged(RecyclerView recyclerView, int newState)
    {
        base.OnScrollStateChanged(recyclerView, newState);

        if (newState == (int)ScrollState.Idle)
        {
            layoutmanager = (LinearLayoutManager)recyclerView.GetLayoutManager();

            int firstVisiblePosition = layoutmanager.FindFirstCompletelyVisibleItemPosition();
            int visible = layoutmanager.FindFirstVisibleItemPosition();
            int last = layoutmanager.FindLastVisibleItemPosition();
            if (firstVisiblePosition >= 0)
            {
                if (oldFocusedLayout != null)
                {
                    Toast.MakeText(ctx, "Stop Video", ToastLength.Long).Show();
                }


            }
            currentFocusedLayout = layoutmanager.FindViewByPosition(firstVisiblePosition);

            Toast.MakeText(ctx, "Play video", ToastLength.Long).Show();

            oldFocusedLayout = currentFocusedLayout;

        }
    }

        feeditem.AddOnScrollListener(onScrollListener);

FindFirstCompletelyVisibleItemPosition問題は、ビューが完全に表示されている場合でも、linearlayout マネージャー メソッドが常に -1 を返すことです。FindFirstVisibleItemPositionやのような他のメソッドFindLastVisibleItemPositionは、ビューの正しい位置を示します。

ここで何が問題なのですか?

4

1 に答える 1

3

layoutManager.findFirstCompletelyVisibleItemPosition()

文書から

FIRST FULLY VISIBLEビューのアダプター位置を返します。この位置には、最後のレイアウト パスの後にディスパッチされたアダプターの変更は含まれません。

これは、少なくとも 1 つの listitem ビューが完全に表示されている必要があることを意味します。そうでない場合は、-1 (NO_POSITION) が返されます。

テストから

これは機能し、正しい位置が得られます...

完全に表示される ListItem ビュー

2 つの ListItem ビューが完全に表示されていないため、これは機能せず、-1 (NO_POSITION) が返されます。

ここに画像の説明を入力

于 2016-11-29T03:40:56.110 に答える