我在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上。
答案 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);