1. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[Flutter] Custom Dialog With RecyclerView only displays first item

Discussão em 'Mobile' iniciado por Stack, Outubro 14, 2024 às 05:22.

  1. Stack

    Stack Membro Participativo

    enter image description here

    I'm trying to create a custom dialog in my Android application that displays a list using a RecyclerView. However, when I run the app, the dialog only shows the first item of the list. I want to display all items in the list.

    how can i show all list

    Here’s the relevant code for my MainActivity ,CustomDialog, and the MainDropdownAdapter class


    class MainActivity : AppCompatActivity() {

    private lateinit var mainDropdownGroup: TextView


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

    val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

    ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
    val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
    v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
    insets
    }

    mainDropdownGroup = findViewById(R.id.main_dropdown_group)


    val groups = arrayListOf(
    MainDropDownModel("Group A", " "),
    MainDropDownModel("Group B", "admin"),
    MainDropDownModel("Group C", " "),
    MainDropDownModel("Group D", " ")
    )

    mainDropdownGroup.setOnClickListener {
    CustomDialog(this, groups) { selectedItem ->
    mainDropdownGroup.text = selectedItem.device_title
    }.show()
    }

    }

    }




    class CustomDialog(
    context: Context,
    private val dataList: ArrayList<MainDropDownModel>,
    private val onItemSelected: (MainDropDownModel) -> Unit
    ) : Dialog(context) {

    private lateinit var recyclerView: RecyclerView
    private lateinit var dropdownAdapter: MainDropdownAdapter

    init {
    val view = LayoutInflater.from(context).inflate(R.layout.item_dropdown_list, null)
    setContentView(view)


    recyclerView = view.findViewById(R.id.dialog_RV)
    recyclerView.layoutManager = LinearLayoutManager(context)

    window?.setBackgroundDrawableResource(android.R.color.transparent)

    dropdownAdapter = MainDropdownAdapter(context, dataList)
    recyclerView.adapter = dropdownAdapter

    dropdownAdapter.setOnItemClickListener { item ->
    onItemSelected(item)
    dismiss() // 다이얼로그 닫기
    }

    val params = window?.attributes
    params?.width = context.resources.displayMetrics.widthPixels - 30.dpToPx(context)
    params?.height = WindowManager.LayoutParams.WRAP_CONTENT
    window?.attributes = params
    }

    fun Int.dpToPx(context: Context): Int {
    return (this * context.resources.displayMetrics.density).toInt()
    }
    }



    class MainDropdownAdapter(
    private val context: Context,
    private val dropdownList: ArrayList<MainDropDownModel>
    ) : RecyclerView.Adapter<MainDropdownAdapter.ViewHolder>() {

    private var onItemClickListener: ((MainDropDownModel) -> Unit)? = null

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    val itemName: TextView = itemView.findViewById(R.id.dropdown_item_text)
    val itemImg: TextView = itemView.findViewById(R.id.dropdown_item_img)

    fun bindItems(item: MainDropDownModel) {
    itemName.text = item.device_title
    itemImg.text = item.device_choice
    }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val view = LayoutInflater.from(context).inflate(R.layout.item_dropdown, parent, false)
    return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val currentItem = dropdownList[position]
    holder.bindItems(currentItem)

    holder.itemView.setOnClickListener {
    onItemClickListener?.invoke(currentItem)
    }
    }

    override fun getItemCount(): Int {
    return dropdownList.size
    }

    fun setOnItemClickListener(listener: (MainDropDownModel) -> Unit) {
    onItemClickListener = listener
    }
    }


    When I click on the mainDropdownGroup TextView, the dialog appears, but it only displays the first item from the groups list. I expected to see all items listed in the dialog, but only the first one shows up.

    Continue reading...

Compartilhe esta Página