Веб-просмотр в переработке не расширяется.(Не уменьшая внизу) - PullRequest
0 голосов
/ 10 мая 2018

Я работаю над чем-то похожим на «Входящие от Google», и мне нужно, чтобы у меня было несколько веб-просмотров внутри recyclerView, где я могу развернуть и свернуть содержимое, нажав на заголовок, который бы добавил / удалил веб-просмотр под заголовком.

Вот суть проекта до сих пор

Fragment
 -> RecyclerView (match_parent on height and width)
   -> Adapter + ViewModel/Model
     -> XML + Databinding.

Структура XML

LinearLayout (vertical)
 -> Header (match_parent on width, wrap_content on height)
 -> WebView (match_parent on width, wrap_content on height) 
(Webview does not scroll and it scales with the contents.
 the recyler view handles scrolling)

По умолчанию все веб-просмотры отключены, и когда пользователь впервые щелкает заголовок, вызывается webview.loadDataWithBaseUrl () с содержимым, которое он должен загрузить, и включает видимость. веб-представление масштабируется, чтобы показать содержимое полностью. когда пользователь снова нажимает на заголовок, видимость исчезает, и вся строка сворачивается в заголовок. Снова щелкнув заголовок, который был ранее расширен, мне не нужно снова загружать данные, и я просто включаю видимость.

В основном все работает отлично, но это очень раздражающая проблема. https://nofile.io/f/UBCh5PO7Wv9/screencapture-1525973579493.mp4 это запись из входящих сообщений Google, и у моего приложения точно такая же проблема.

когда я нажимаю на заголовок, чтобы развернуть его и загрузить содержимое в веб-просмотр, некоторые веб-просмотры расширяются ниже, и под этим я подразумеваю, что заголовок остается на месте, и похоже, что содержимое загружается ниже заголовка, на который нажали.

но для определенного контента веб-просмотры расширяются, а это означает, что он перемещает заголовок, по которому щелкнули, чтобы развернуть содержимое вверх. Что означает, что я смотрю на конец содержимого, а не на верх. как и в этом случае папки «Входящие», я просматриваю конец письма, но не вверху письма.

Я скопировал источники электронной почты в видео, которым я поделился, и использовал их для загрузки в своих веб-просмотрах, и вот мои выводы.

  • это не имеет ничего общего с загруженным содержимым, потому что даже я путаю вещи, это происходит
  • это не имеет никакого отношения к количеству просмотров веб-страниц или индексу данного веб-просмотра либо
  • этого не произойдет, если я разверну содержимое сверху вниз. значение из индекса 0..n -> НО НО НО это всегда происходит, когда у меня все свернуто и я расширяю содержимое снизу вверх .. с n до 0.

enter image description here

В основном, если A и B являются верхним и нижним краями веб-обзора, в идеале A должен оставаться стабильным, а B должен увеличиваться вниз, толкая содержимое recyclerView под ним. но вместо этого, когда я раскрываю содержимое снизу вверх, нижняя строка B остается стабильной, а веб-просмотр увеличивается и выталкивает вместе с ним заголовок и элементы над данной строкой, что вызывает раздражающее поведение при просмотре конца содержимое, чем в верхней части, как в папке входящих сообщений от Google, а также.

Вот гиф того, что происходит - когда я нажимаю на фиолетовый заголовок, веб-просмотр (розовый) загружает электронную почту. когда я нажимаю на последний, веб-представление расширяется ниже. Но когда я нажимаю на 2-й последний, он расширяется выше, что также поднимает заголовок.

image

есть мысли? помочь?

спасибо

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Вот как система Android обрабатывает ваш взгляд. Для лучшего UX вы должны поместить выбранный (расширенный) вид сверху списка в recyclerView. Для достижения этого вы должны обработать элементы на слушателе onClick внутри вашего адаптера, а затем вернуть позицию элемента и использовать

scrollToPositionWithOffset(pos, 0);

Как это:

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.addItemDecoration(new NullDeividerItemDecoration());
MyAdapter myAdapter = new MyAdapter<>(context, list, new
           OnAdapterItemClickListener<WebsiteDto>() {
                    @Override
                    public void onAdapterItemClick(WebsiteDto websiteDto , int pos) {
                        //Scroll item pos to 0 pixels from the top
                        linearLayoutManager.scrollToPositionWithOffset(pos, 0);
                    }


                    @Override
                    public void onAdapterItemLongClick(WebsiteDto websiteDto) {

                    }
                });

recyclerView.setAdapter(myAdapter);

Надеюсь, полезно.

0 голосов
/ 12 июня 2018

Вызовите scrollToPosition или scrollToPositionWithOffset после того, как веб-представление станет видимым, чтобы заставить представление рециркулятора прокручивать до начала дочернего представления, в этом случае ваш заголовок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...