Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MainActivity : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
- val viewPager = findViewById<ViewPager2>(R.id.caradd_viewpager)
- viewPager.adapter = ViewPagerAdapter(viewPager, this)
- this.findViewById<Button>(R.id.caradd_btn_viewpager_back)
- .setOnClickListener{
- if (viewPager.currentItem !=0) {
- viewPager.setCurrentItem(viewPager.currentItem-1, true)
- }
- }
- }
- }
- /* ======================================================================== */
- class ViewPagerAdapter(private val viewpager2: ViewPager2): RecyclerView.Adapter<ViewPagerViewHolder>() {
- private val brands: Array<String> = arrayOf("BMW", "Honda", "Hyundai", "Subaru", "Suzuki")
- private val models: Array<Array<String>> = arrayOf(
- arrayOf("Series 3", "Series 5", "X3", "X5", "GT"),
- arrayOf("Accord", "Civic", "CR-V", "Element", "Pilot"),
- arrayOf("Creta", "Elantra", "ix35", "Santa FE", "Solaris"),
- arrayOf("BRZ", "Forester", "Impreza", "Legacy", "Outback"),
- arrayOf("Grand Vitara", "Jimny", "Kizashi", "Vitara", "Swift")
- )
- private var selectedBrand: Int? = null
- private var selectedMark: Int? = null
- private var recyclerView: RecyclerView? = null
- private var recyclerAdapter: VP_RecyclerViewAdapter? = null
- private val viewAdapter2_pages_count = 2
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewPagerViewHolder {
- val vpItem = LayoutInflater.from(parent.context).inflate(R.layout.caradd_viewpager_item, parent, false)
- return ViewPagerViewHolder(vpItem)
- }
- override fun getItemCount(): Int = viewAdapter2_pages_count
- override fun onBindViewHolder(holder: ViewPagerViewHolder, position: Int) = holder.itemView.run {
- when (position) {
- 0 -> {
- // brand select
- caradd_viewpager_header.text = "Select brand"
- reAssingnRecyclerView(holder.itemView, brands, true)
- }
- 1 -> {
- // mark select
- caradd_viewpager_header.text = "Select mark"
- reAssingnRecyclerView( holder.itemView, models[selectedBrand!!], false)
- }
- else -> {}
- }
- }
- private fun reAssingnRecyclerView(v: View, myDataset: Array<String>, isIconsShow: Boolean = false){
- recyclerView =
- v.findViewById<RecyclerView>(R.id.caradd_viewpager_recyclerview).apply {
- setHasFixedSize(true)
- }
- val layoutManager = LinearLayoutManager(v.context)
- recyclerView?.layoutManager = layoutManager
- val newRecyclerAdapter = VP_RecyclerViewAdapter(myDataset, isIconsShow) { pos ->
- this@ViewPagerAdapter.selectedBrand = pos
- Log.d("***","ViewPagerAdapter - reAssignRecyclerView - " + this.selectedBrand)
- viewpager2.setCurrentItem(viewpager2.currentItem + 1, true)
- }
- // specify an viewAdapter
- if (recyclerAdapter==null) {
- recyclerAdapter = newRecyclerAdapter
- recyclerView!!.adapter = recyclerAdapter
- } else {
- recyclerAdapter?.clear()
- recyclerView!!.swapAdapter(newRecyclerAdapter, true)
- recyclerAdapter = newRecyclerAdapter
- }
- }
- }
- /* ======================================================================== */
- class ViewPagerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
- /* ======================================================================== */
- class VP_RecyclerViewAdapter(
- private var dataset: Array<String>,
- private val isIconShow: Boolean,
- private val lambdaFun: (Int) -> Unit
- ): RecyclerView.Adapter<VP_RecyclerViewViewHolder>() {
- override fun onCreateViewHolder(
- parent: ViewGroup,
- viewType: Int
- ): VP_RecyclerViewViewHolder {
- val rvItem = LayoutInflater.from(parent.context).inflate(R.layout.caradd_viewpager_item_recyclerview_item, parent, false)
- return VP_RecyclerViewViewHolder(rvItem)
- }
- fun clear() {
- val size: Int = dataset.size
- if (size > 0) {
- for (i in 0 until size) {
- dataset.drop(i)
- }
- notifyItemRangeRemoved(0, size)
- }
- notifyDataSetChanged()
- }
- override fun onBindViewHolder(holder: VP_RecyclerViewViewHolder, position: Int) {
- holder.textView.findViewById<TextView>(R.id.caradd_viewpager_item_recyclerview_item_text).text = dataset[position]
- holder.itemView.setOnClickListener {
- Log.d("***", "position selected $position")
- this.lambdaFun(position)
- }
- }
- override fun getItemCount() = dataset.size
- }
- /* ======================================================================== */
- class VP_RecyclerViewViewHolder(val textView: View) : RecyclerView.ViewHolder(textView)
Add Comment
Please, Sign In to add comment