마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

listviewadapter 에서 다른함수 콜을하고싶습니다.

0 추천

 

listviewAdapter.kt

-------------------

class listviewAdapter(val context: Context, val accountList: ArrayList<account>) : BaseAdapter() {

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {

 

val uid = view.findViewById<TextView>(R.id.uid)

uid.text = account.uid.toString()

modify_delete.setOnClickListener {

 

            var pop = PopupMenu(context, modify_delete)

            pop.menuInflater.inflate(R.menu.main_popup, pop.menu)

 

            pop.setOnMenuItemClickListener { item ->

                when (item.itemId) {

                    R.id.modify ->

                        Toast.makeText(context, "Modify ${uid.text}", Toast.LENGTH_SHORT).show()

                    R.id.delete ->

                        Toast.makeText(context, "Delete ${uid.text}", Toast.LENGTH_SHORT).show()

                }

                false

            }

            pop.show()

 

        }

        return view

    }

}

 

homefragment.kt

-----------------

 

class HomeFragment : Fragment(), View.OnClickListener {

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

    super.onViewCreated(view, savedInstanceState)

 

    var listviewAdapter = listviewAdapter(mainActivity, accountList)

    var listView = view.findViewById<ListView>(R.id.listView)

 

    listView.adapter = listviewAdapter

    reloadListView()

 

    val serverAdd = view.findViewById<Button>(R.id.serverAdd)

    serverAdd.setOnClickListener(this)

 

    dialog = ServerAddDialog(mainActivity,onOK={

        listviewAdapter.clearData()

 

        reloadListView()

        //listviewAdapter = listviewAdapter(mainActivity, accountList)

        listviewAdapter.notifyDataSetChanged()

    }) {} as ServerAddDialog

}

 

스샷에 점3개를 클릭하면 popup 메뉴가나와 popup메뉴를 클릭하면 homefragment 에서 다이얼로그를 나오게 구현하고싶습니다.

그런데 어댑터에서  pop.setOnMenuItemClickListener 리스너를 걸고 처리를 할려고햇더니 뭘할수가없네요;;

다이얼로그도 못띄우고 다른작업자체를 못합니다. 어떻게해야되나요? 

 

ellrewa (260 포인트) 님이 2023년 6월 17일 질문
ellrewa님이 2023년 6월 17일 수정

1개의 답변

0 추천

코틀린 람다함수 또는 리스너 인터페이스를 만드셔서 ListAdapter에 넘겨주세요.

class ListViewAdapter(
    val context: Context,
    val accountList: ArrayList<Account> = arrayListOf(),
    var onModifyAccount: ((Account) -> Unit)? = null,
    var onDeleteAccount: ((Account) -> Unit)? = null
) : BaseAdapter() {

  ...


    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
       ...
       val modify_delete = view.findViewBy(R.id.modify_delete)
        modify_delete.setOnClickListener {
            showMorePopup(anchor = modify_delete, account = account)
        }
        uid.text = account.name
        return itemView
    }

   private fun showMorePopup(anchor: View, account: Account) {
        val pop = PopupMenu(context, anchor)
        pop.menuInflater.inflate(R.menu.main_popup, pop.menu)
        pop.setOnMenuItemClickListener { item ->
            when (item.itemId) {
                R.id.modify ->
                    onModifyAccount?.invoke(account)
                R.id.delete ->
                    onDeleteAccount?.invoke(account)
            }
            false
        }
        pop.show()
    }
}

 

class HomeFragment : Fragment(), View.OnClickListener {

     private val adapter by lazy {
        ListViewAdapter(
            context = requireContext(),
            onDeleteAccount = ::onModifyAccount,
            onModifyAccount = ::onDeleteAccount
        )
    }


   private fun onModifyAccount(account: Account) {
        Toast.makeText(context, "Modify tapped.", Toast.LENGTH_SHORT).show()
    }

    private fun onDeleteAccount(account: Account) {
        Toast.makeText(context, "Delete  tapped.", Toast.LENGTH_SHORT).show()
    }

}

 

spark (227,530 포인트) 님이 2023년 6월 17일 답변
spark님이 2023년 6월 18일 수정
...