Как исправить непредвиденное поведение на ViewPager в RecyclerView при быстрой прокрутке? - PullRequest
0 голосов
/ 07 мая 2019

Мой RecyclerView имеет видоискатель в каждой строке для нескольких кнопок, которые можно прокручивать.

Когда я выполняю быструю прокрутку в состоянии по умолчанию, он работает нормально.

Но некоторые виды (страницы) частично отображаются настраницы по умолчанию.Я могу наблюдать, как они перелистываются на страницу по умолчанию со страницы перелистывания ранее (на самом деле это не их. Одиночная строка, которая перерабатывается выше)

Иногда действительно маленькое «частичное представление» отображается в углу, даже если они были установлены по умолчанию.как показано ниже.

Example][1 Левый верхний угол.Я даже не трогал эту строку вообще.

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

Также результаты в SparseIntArray все нормальные, как и ожидалось.

Вот несколько кодов ниже.Кроме того, все xmls

PageWidth

public float getPageWidth(int position)
    {
        if(position != 3 && position != 0)
        {
            return 0.15f;
        }
        else
        {
            return 1f;
        }
    }

Init и Load

@Override
    public void onBindViewHolder(@NonNull mAdapter.ClipViewHolder clipViewHolder, int position)
    {
        if(stateArray.get(position) > 0 && stateArray.get(position) <= 4)
        {
            clipViewHolder.myPager.setCurrentItem(stateArray.get(position) - 1);
        }
        else
        {
            clipViewHolder.myPager.setCurrentItem(3);
            stateArray.append(position, clipViewHolder.myPager.getCurrentItem() + 1);
        }
    }

Save

@Override
    public void onViewRecycled(@NonNull ClipViewHolder holder)
    {
        stateArray.put(holder.getAdapterPosition(), holder.myPager.getCurrentItem() + 1);
        super.onViewRecycled(holder);
    }

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

1 Ответ

1 голос
/ 07 мая 2019
//Put below code in XML file    
<android.support.v4.widget.NestedScrollView
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  app:layout_behavior="@string/appbar_scrolling_view_behavior">

  <android.support.v7.widget.RecyclerView
   android:id="@+id/recycleView"
   android:nestedScrollingEnabled="false"
   android:layout_width="match_parent"
   android:layout_height="wrap_content" />
/>

// put below lines in your activity as
/* catche memory */
recyclerView.setItemViewCacheSize(200);
recyclerView.setDrawingCacheEnabled(true);
recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);

RecyclerView.LayoutManager mLayoutManager = new 
   LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);

//for smooth recycler
recyclerView.setNestedScrollingEnabled(false);  // Main Line
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.smoothScrollBy(0, 10);
...