Как реализовать RecyclerViewPager в котлине? - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь реализовать RecyclerViewPagerIndicator в моем проекте, но не могу заставить его работать.

Я работаю с Kotlin и AndroidX

Я ожидаю отправкимассив с текстом и изображениями из базы данных и отображение в RecyclerViewPager , что-то вроде тиндера.

1 Ответ

0 голосов
/ 21 октября 2019

Я бы предложил вам использовать dotsIndicator , так как он

  • поддерживает ViewPager 2, который основан на RecyclerView
  • , поддерживается одинвыбрано не (проект кажется заброшенным)
  • записано в Kotlin

Пример:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/view_pager_2"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <com.tbuonomo.viewpagerdotsindicator.WormDotsIndicator
        android:id="@+id/dots_indicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"/>

</LinearLayout>

MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setupViewPager2()
    }

    private fun setupViewPager2() {
        val viewPager2 = findViewById<ViewPager2>(R.id.view_pager_2)
        val dotsIndicator = findViewById<WormDotsIndicator>(R.id.dots_indicator)

        viewPager2.adapter = PagerAdapter(this)
        dotsIndicator.setViewPager2(viewPager2)
    }
}

PagerAdapter.kt

class PagerAdapter(fa:FragmentActivity): FragmentStateAdapter(fa) {

    override fun getItemCount(): Int = 3

    override fun createFragment(position: Int): Fragment {
        return when(position){
            0 -> SampleFragment.newInstance("One", "desc 1")
            1 -> SampleFragment.newInstance("Two", "desc 2")
            2 -> SampleFragment.newInstance("Three", "desc 3")
            else -> throw Exception("No such position")
        }
    }
}

frag_sample.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".SampleFragment">
    <TextView
        android:id="@+id/txt_header"
        tools:text="Header 1"
        android:textAlignment="center"
        android:textSize="24sp"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/txt_desc"
        tools:text="Desc 1"
        android:textAlignment="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

SampleFragment.kt

class SampleFragment : Fragment() {

    private var header: String? = null
    private var desc: String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {
            header = it.getString(ARG_Header)
            desc = it.getString(ARG_Desc)
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_sample, container, false)
        setView(view)
        return view
    }

    private fun setView(view:View){
        val headerText = view.findViewById<TextView>(R.id.txt_header)
        headerText.text = header
        val descText = view.findViewById<TextView>(R.id.txt_desc)
        descText.text = desc

    }

    companion object {

        @JvmStatic
        fun newInstance(param1: String, param2: String) =
            SampleFragment().apply {
                arguments = Bundle().apply {
                    putString(ARG_Header, param1)
                    putString(ARG_Desc, param2)
                }
            }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...