>

프로젝트에서 가로 및 오른쪽 화살표로 가로 스크롤보기에 3 x 3의 항목 목록을 표시해야합니다. 오른쪽 화살표를 클릭하면 다음 그림과 같이 3 개의 항목이 표시됩니다

SnapHelper 또는 PagerSnapHelper를 사용하여 ViewPager 또는 RecyclerView와 함께 가야한다는 것이 혼란 스럽습니다. 달성 방법에 대한 다른 제안이 있습니까?

  • 답변 # 1

    smoothScrollToPosition을 스크롤하는 것은 어떻습니까? 이와 같은 것

    int offset = 3;
    int size = objectsList.size()-1;
    @OnClick{
    recyclerView.smoothScrollToPosition(offset);
    if((offset+3)<size) {
       offset = offset + 3;
    } else 
        offset = size;
    }
    
    

  • 답변 # 2

    이 질문에 답하려면 viewpager를 사용하고 모든 페이지에서 리사이클 러를 사용하고 페이지에서 데이터를 3 x 3 씩 전송하여 리사이클 러로 설정해야합니다.

    <올>

    부모 xml에 Viewpager를 추가해야하는 첫 번째 단계 :

    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"/>
    
    

    이 단계에서는 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
    }
    
    

    세 번째 단계에서는 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!!)
    
    

    마지막으로 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
    }
    
    

    결과 :

    전체 소스를 보려면이 링크로 이동하십시오

관련 자료

  • 이전 java - invaliddefinitionexception - 내부 클래스에 대한 직렬 변환기가 없습니다
  • 다음 python - Seaborn의 산점도와 lmplot 매개 변수의 차이점