dsda

ViewPager2 + RecyclerView in it items

Oct 26th, 2020
549
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 5.10 KB | None | 0 0
  1. class MainActivity : AppCompatActivity() {
  2.     override fun onCreate(savedInstanceState: Bundle?) {
  3.         super.onCreate(savedInstanceState)
  4.         setContentView(R.layout.activity_main)
  5.         val viewPager = findViewById<ViewPager2>(R.id.caradd_viewpager)
  6.         viewPager.adapter = ViewPagerAdapter(viewPager, this)
  7.  
  8.         this.findViewById<Button>(R.id.caradd_btn_viewpager_back)
  9.                 .setOnClickListener{
  10.                     if (viewPager.currentItem !=0) {
  11.                         viewPager.setCurrentItem(viewPager.currentItem-1, true)
  12.                     }
  13.                 }
  14.     }
  15. }
  16.  
  17. /* ======================================================================== */
  18.  
  19. class ViewPagerAdapter(private val viewpager2: ViewPager2): RecyclerView.Adapter<ViewPagerViewHolder>() {
  20.  
  21.     private val brands: Array<String> = arrayOf("BMW", "Honda", "Hyundai", "Subaru", "Suzuki")
  22.     private val models: Array<Array<String>> = arrayOf(
  23.         arrayOf("Series 3", "Series 5", "X3", "X5", "GT"),
  24.         arrayOf("Accord", "Civic", "CR-V", "Element", "Pilot"),
  25.         arrayOf("Creta", "Elantra", "ix35", "Santa FE", "Solaris"),
  26.         arrayOf("BRZ", "Forester", "Impreza", "Legacy", "Outback"),
  27.         arrayOf("Grand Vitara", "Jimny", "Kizashi", "Vitara", "Swift")
  28.     )
  29.  
  30.     private var selectedBrand: Int? = null
  31.     private var selectedMark: Int? = null
  32.  
  33.     private var recyclerView: RecyclerView? = null
  34.     private var recyclerAdapter: VP_RecyclerViewAdapter? = null
  35.  
  36.     private val viewAdapter2_pages_count = 2
  37.  
  38.     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewPagerViewHolder {
  39.         val vpItem = LayoutInflater.from(parent.context).inflate(R.layout.caradd_viewpager_item, parent, false)
  40.         return ViewPagerViewHolder(vpItem)
  41.     }
  42.  
  43.     override fun getItemCount(): Int = viewAdapter2_pages_count
  44.  
  45.     override fun onBindViewHolder(holder: ViewPagerViewHolder, position: Int) = holder.itemView.run {
  46.         when (position) {
  47.             0 -> {
  48.                 // brand select
  49.                 caradd_viewpager_header.text = "Select brand"
  50.                 reAssingnRecyclerView(holder.itemView, brands, true)
  51.             }
  52.             1 -> {
  53.                 // mark select
  54.                 caradd_viewpager_header.text = "Select mark"
  55.                 reAssingnRecyclerView( holder.itemView, models[selectedBrand!!], false)
  56.             }
  57.             else -> {}
  58.         }
  59.     }
  60.  
  61.  
  62.     private fun reAssingnRecyclerView(v: View, myDataset: Array<String>, isIconsShow: Boolean = false){
  63.  
  64.         recyclerView =
  65.             v.findViewById<RecyclerView>(R.id.caradd_viewpager_recyclerview).apply {
  66.                 setHasFixedSize(true)
  67.             }
  68.  
  69.         val layoutManager = LinearLayoutManager(v.context)
  70.         recyclerView?.layoutManager = layoutManager
  71.  
  72.  
  73.         val newRecyclerAdapter = VP_RecyclerViewAdapter(myDataset, isIconsShow) { pos ->
  74.             this@ViewPagerAdapter.selectedBrand = pos
  75.             Log.d("***","ViewPagerAdapter - reAssignRecyclerView - " + this.selectedBrand)
  76.             viewpager2.setCurrentItem(viewpager2.currentItem + 1, true)
  77.         }
  78.  
  79.         // specify an viewAdapter
  80.         if (recyclerAdapter==null) {
  81.             recyclerAdapter = newRecyclerAdapter
  82.             recyclerView!!.adapter = recyclerAdapter
  83.         } else {
  84.             recyclerAdapter?.clear()
  85.             recyclerView!!.swapAdapter(newRecyclerAdapter, true)
  86.             recyclerAdapter = newRecyclerAdapter
  87.         }
  88.     }
  89.  
  90. }
  91.  
  92.  
  93. /* ======================================================================== */
  94.  
  95.  
  96. class ViewPagerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
  97.  
  98.  
  99. /* ======================================================================== */
  100.  
  101.  
  102. class VP_RecyclerViewAdapter(
  103.     private var dataset: Array<String>,
  104.     private val isIconShow: Boolean,
  105.     private val lambdaFun: (Int) -> Unit
  106. ): RecyclerView.Adapter<VP_RecyclerViewViewHolder>() {
  107.     override fun onCreateViewHolder(
  108.         parent: ViewGroup,
  109.         viewType: Int
  110.     ): VP_RecyclerViewViewHolder {
  111.         val rvItem = LayoutInflater.from(parent.context).inflate(R.layout.caradd_viewpager_item_recyclerview_item, parent, false)
  112.         return VP_RecyclerViewViewHolder(rvItem)
  113.     }
  114.  
  115.  
  116.     fun clear() {
  117.         val size: Int = dataset.size
  118.         if (size > 0) {
  119.             for (i in 0 until size) {
  120.                 dataset.drop(i)
  121.             }
  122.             notifyItemRangeRemoved(0, size)
  123.  
  124.         }
  125.         notifyDataSetChanged()
  126.     }
  127.  
  128.  
  129.     override fun onBindViewHolder(holder: VP_RecyclerViewViewHolder, position: Int) {
  130.         holder.textView.findViewById<TextView>(R.id.caradd_viewpager_item_recyclerview_item_text).text = dataset[position]
  131.         holder.itemView.setOnClickListener {
  132.             Log.d("***", "position selected $position")
  133.             this.lambdaFun(position)
  134.         }
  135.     }
  136.  
  137.     override fun getItemCount() = dataset.size
  138.  
  139. }
  140.  
  141.  
  142. /* ======================================================================== */
  143.  
  144.  
  145. class VP_RecyclerViewViewHolder(val textView: View) : RecyclerView.ViewHolder(textView)
Add Comment
Please, Sign In to add comment