Recyclerview位于NestedScrollview内时自动启动视频

时间:2019-07-02 13:33:32

标签: android video android-recyclerview android-nestedscrollview autostart

我在NestedScrollview中有一个recyclerview。 recyclerview加载图像和视频。图像没有问题。但是我已经为视频应用了一个名为Toroplayer的库,该库在获得焦点时会自动启动。现在,仅使用recyclerview时,加载在其中的视频便成为焦点,因此按预期开始。但是当我在Recyclerview上使用NestedScrollview时,视频无法获得焦点,因此无法自动启动(这是我认为问题的原因。我可能是错的。但是当我将Videoview放在Nestedscrollview之外时,视频会自动启动。)我需要使用Nestedscrollview,不能忽略它。

这是XML的一部分:

<android.support.v4.widget.SwipeRefreshLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/swipe_refresh_layout"

        android:layout_marginTop="8dp"
        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">


        <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:fillViewport="true"
        android:overScrollMode="never"
            android:id="@+id/hometimeline"
            app:layout_behavior="com.evs.demo.layout.FixedScrollingViewBehavior">



                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="vertical"
                    >


                    <android.support.v7.widget.RecyclerView
                        android:layout_width="match_parent"
                        android:layout_height="80dp"
                        android:layout_marginTop="1dp"
                        android:background="#fff"
                        android:id="@+id/statusView"
                        android:orientation="horizontal"
                        android:layout_marginStart="4dp"
                        android:layout_marginEnd="4dp"
                        android:layout_marginBottom="2dp"
                        />

                    <android.support.v7.widget.CardView
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        app:cardElevation="18dp"

                        >

                        <im.ene.toro.widget.Container
                            xmlns:android="http://schemas.android.com/apk/res/android"
                            android:id="@+id/home_blog_list"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_marginStart="14dp"
                            android:layout_marginEnd="14dp"
                            android:nestedScrollingEnabled="false"
                            app:layoutManager="LinearLayoutManager"
                            app:layout_behavior="@string/appbar_scrolling_view_behavior"
                            />

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




                </LinearLayout>



    </android.support.v4.widget.NestedScrollView>


        </LinearLayout>


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

由于toroplayer(我正在使用的视频播放器库)开始成为焦点,因此我需要一种方法,使recyclerview中的子对象将焦点移到nestedscrollview上。

2 个答案:

答案 0 :(得分:1)

  

有什么选择?

您不想依赖NestedScrollView的此问题的“自然”替代方法是使用RecyclerView的ViewType参数,并根据您的内容为各个视图充气。因此,整个过程可以滚动,这要归功于RecyclerView,并且一切正常。但这需要做更多的工作,因为您必须为所有不同的内容创建视图类型并准备列表,这样RecyclerView会收到一个格式清晰的常见项目清单,该清单可以描述您需要显示的内容。这是更多的工作,但是一旦您开始工作,它就会非常可靠。

查看布局,您将具有以下层次结构:

<SwipeRefresh>
  <LinearLayout>
     <NestedScrollView>
        <LinearLayout>
            <RecyclerView />
            <CardView>
               <toro.widget.Container />
            </CardView>
        </LinearLayout>
      </NestedScrollView>
   </LinearLayout>
</SwipeRefresh>

如果我不需要使用NestedScrollView,可以使用“约束布局”将其展平。我了解布局的方式是,将recyclerview的高度固定为80dp,在其下方安装此carview,该carview的底部固定有用于存放某些东西(视频播放器?)的容器。

您提到您需要使用NestedScrollView,但我不知道为什么,但是如果您出于某种原因意识到自己不需要它,这就是我实现布局的方法:

<SwipeRefresh>
   <ConstraintLayout>
      <RecyclerView />
      <CardView>
         <Toro Container>
      </CardView>
    </ConstraintLayout>
</SwipeRefresh>

在此操作中,滑动将包含ConstraintLayout,它将使用由Swipe布局提供/提供的整个屏幕,并且RecyclerView的顶部高度为80dp,接下来是CardView,并使用所有剩余空间,并且Toro Container内的空间也将使用CardView所提供的空间。

如果您也许弄清了为什么需要NestedScrollView,那么也许我们可以重新考虑一下,但是如果您确实确实需要嵌套,那么您将需要玩(可能扩展NestedScrollView)以查看在点击这些子级时焦点在做什么。调试焦点的方向,然后从那里获取焦点。 :/

答案 1 :(得分:0)

尝试添加到回收站

recyclerView.setNestedScrollingEnabled(false);