Макет вкладки прокручивается до конца автоматически в RTL - PullRequest
0 голосов
/ 13 июня 2018

У меня есть макет вкладки в моем приложении.Я добавляю вкладки динамически.Изначально добавляются две вкладки, и все работает нормально, затем через некоторое время в ответ на сетевой вызов добавляются остальные шесть вкладок.проблема заключается в том, что при добавлении шести вкладок в ответ на сетевой вызов вся раскладка вкладок автоматически прокручивается до конца.

Несколько замечаний:

  • Это происходит только в макете RTL, на макете LTR все работает нормально.

  • Если я установил адаптер для viewPager после получения всех вкладок в ответе сетевого вызова, то он работает нормально.

Вот код.

tabLayout.setupWithViewPager(mViewPager);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
tabLayout.setSmoothScrollingEnabled(true);

pagerAdapter = new PagerAdapter(getChildFragmentManager(), getContext(), tabs);
viewPager.setAdapter(pagerAdapter);

if(savedInstanceState == null) {
    pagerAdapter.add(getTab1());
    pagerAdapter.add(getTab2());
    setCustomViews(getContext());
    loadMoreTabs(); //Network call
}

private void loadMoreTabs(){
   //in response of network call
   onResponse(){
       pagerAdapter.addAll(new ArrayList<Object>(response.body()));
       setCustomViews();  //Here whole tab layout scrolls till end
}

1 Ответ

0 голосов
/ 18 октября 2018

Я нашел, почему это произошло.На самом деле проблема была в том, чтобы сначала установить адаптер, а затем добавить элементы в адаптер.Когда адаптер уже установлен, и мы пытаемся добавить какой-либо элемент в адаптер и вызвать notifyDataSetChanged (), он прокручивается до конца [хотя причина не известна].Решение - снова установить адаптер вместо добавления элементов в адаптер.Я знаю, что это не очень хороший подход, но он работает.

private void loadMoreTabs(){
   onResponse(){
       tabs.addAll(new ArrayList<Object>(response.body()));
       viewPager.setAdapter(pagerAdapter);
       setCustomViews();
}
...