Автозапуск видео, когда Recyclerview находится внутри NestedScrollview - PullRequest
0 голосов
/ 02 июля 2019

У меня есть просмотрщик в NestedScrollview. Программа RecyclerView загружает изображения и видео. С изображением проблем нет. Но я применил некоторую библиотеку под названием Toroplayer для видео, которая запускается автоматически, когда она получает фокус. Теперь, при использовании только вьюблера, видео, загруженное в него, получило фокус и, следовательно, начиналось как ожидалось. Но когда я использую NestedScrollview поверх Recyclerview, видео не получает фокуса, поэтому не запускается автоматически (это, как я думаю, причина проблемы. Я могу ошибаться. Но когда я помещаю видеовиде за пределы 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 (библиотека видеоплеера, которую я использую) начинает фокусироваться, мне нужно иметь способ, чтобы дочерний элемент в представлении реселлера фокусировался на nestedscrollview.

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Какая альтернатива?

«естественная» альтернатива этой проблеме, при которой вы не хотите полагаться на NestedScrollView, - это использование параметра ViewType RecyclerView и раздувание отдельных представлений в зависимости от вашего контента. Так что все это прокручивается благодаря RecyclerView, и все это работает. Но это немного больше работы, так как вам нужно создать типы представлений для всего различного контента и подготовить список, чтобы RecyclerView получил хороший отформатированный список общего элемента, который может описать то, что вам нужно отобразить. Это больше работы, но как только вы заработаете, это очень надежно.

Глядя на свой макет, у вас есть следующая иерархия:

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

Если бы мне не нужно было использовать NestedScrollView, я бы сгладил его с помощью Constraint Layout. Насколько я понимаю вашу компоновку, у вас есть окно ресайклера с фиксированной высотой 80dp, а ниже вы подходите под это автомобильное изображение, в котором есть контейнер для чего-то (видеоплеер?), Закрепленный внизу.

Вы упоминаете, что вам нужно использовать NestedScrollView, и я не знаю почему, но если вы по какой-то причине понимаете, что вам это не нужно , я бы реализовал макеты так:

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

В этом случае смахивание будет охватывать ConstraintLayout, который будет использовать весь экран, предоставленный / для макета смахивания, и RecyclerView будет на высоте 80dp вверху, затем будет CardView, использующий все оставшееся пространство. и внутри Toro Container также будет использовать столько места, сколько предоставляется CardView.

Если вы, возможно, поясните, зачем вам нужен NestedScrollView, то, возможно, мы можем переосмыслить это, но если не считать, что вам нужно trully , то вам нужно будет поиграть (и, возможно, расширить NestedScrollView), чтобы увидеть, что делает фокус, когда вы касаетесь этих детей. Отладьте, куда направлен фокус, и возьмите его оттуда. : /

0 голосов
/ 02 июля 2019

Попробуйте добавить в Recycler

recyclerView.setNestedScrollingEnabled(false);
...