RecyclerView с 3 на 3 элемента Горизонтальная прокрутка - PullRequest
0 голосов
/ 20 ноября 2018

В моем проекте мне нужно показать список элементов 3 на 3 на горизонтальной прокрутке со стрелками влево и вправо.Если я нажму на стрелку вправо, следующие 3 элемента будут отображаться, как показано на рисунке нижеили PagerSnapHelper.Есть ли другие предложения о том, как мне этого добиться

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Как насчет прокрутки с помощью smoothScrollToPosition?Как то так

int offset = 3;
int size = objectsList.size()-1;
@OnClick{
recyclerView.smoothScrollToPosition(offset);
if((offset+3)<size) {
   offset = offset + 3;
} else 
    offset = size;
}
0 голосов
/ 21 ноября 2018

Чтобы ответить на этот вопрос, вы должны использовать viewpager, а на любой странице использовать переработчик и отправлять данные 3 на 3 на странице и устанавливать данные для переработчика.

  1. Первый шаг - добавить Viewpager.в родительском xml:

    activity_main.xml

    <ImageView
            android:id="@+id/left_arrow"
            android:layout_width="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_alignTop="@+id/view_pager"
            android:rotation="180"
            android:padding="8dp"
            android:layout_alignBottom="@id/view_pager"
            android:src="@drawable/ic_arrow"/>
    
    <android.support.v4.view.ViewPager
            android:layout_width="match_parent"
            android:id="@+id/view_pager"
            android:layout_toLeftOf="@id/right_arrow"
            android:layout_toRightOf="@id/left_arrow"
            android:layout_height="150dp"/>
    
    <com.rd.PageIndicatorView
            android:id="@+id/pageIndicatorView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/view_pager"
            app:piv_animationType="worm"
            app:piv_dynamicCount="true"
            android:layout_marginTop="10dp"
            android:layout_centerHorizontal="true"
            app:piv_interactiveAnimation="true"
            app:piv_radius="3dp"
            app:piv_unselectedColor="#999999"
            app:piv_selectedColor="#000000"
            app:piv_viewPager="@id/view_pager"
            attrs:piv_padding="8dp" />
    <ImageView
            android:id="@+id/right_arrow"
            android:padding="8dp"
            android:layout_alignTop="@+id/view_pager"
            android:layout_alignBottom="@id/view_pager"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_centerVertical="true"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_arrow"/>
    

  2. На этом шаге необходимо создать адаптер Viewpager:

    pageAdapter.kt

    override fun getItem(position: Int): Fragment {
        val firstItem = ((position + 1) * 3) - 2
        val lastItem = ((position + 1) * 3)
        val itemSet = arrayListOf<String>()
        for (i in firstItem..lastItem) {
            if (i <= items.size)
                itemSet.add(items[i - 1])
        }
        return ItemFragment.newInstance(itemSet)
    }
    
    override fun getCount(): Int {
        return size
    }
    
  3. На третьем шаге вы должны создать фрагмент, чтобы показать каждую страницу viewPager и только в Oncreate, установить адаптер утилизатора и отправить данные вадаптер:

    ItemFragment

    // Creates the view controlled by the fragment
    val view = inflater.inflate(R.layout.page, container, false)
    val recycler = view.findViewById<RecyclerView>(R.id.recycler)
    
    // Retrieve and display the movie data from the Bundle
    val args = arguments
    recycler.layoutManager = GridLayoutManager(activity,3)
    recycler.adapter = ItemAdapter(args?.getStringArrayList("items")!!, this.activity!!)
    
  4. И Последнее Просто создайте RecyclerAdapter и покажите данные для каждого элемента в списке:

    ItemAdapter.kt

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(LayoutInflater.from(context).inflate(R.layout.item, parent, false))
    }
    
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder?.title?.text = items.get(position)
    }
    
    override fun getItemCount(): Int {
        return items.size
    }
    

    Результат:

    enter image description here

, если вы хотите увидетьполный источник, просто перейдите по этой ссылке

...