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

listview notifychanged() 어떻게 보내야하나요?

0 추천
ServerDialog.kt 파일

class ServerDialog(Context: context) : Dialog(context), View.OnClickListener{
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dialog_user)
    }
    val btnCancel = findViewById<Button>(R.id.btnCancel)
    btnCancel.setOnClickListener {
        this.clickCancel()
    }
    val btnOk = findViewById<Button>(R.id.btnOk)
    btnOk.setOnClickListener {
        this.clickOk()
    }
    fun clickOk() {
        this.dismiss()
    }
    fun clickCancel() {
        this.dismiss()
    }
}

HomeFragment.kt

class HomeFragment : Fragment(), View.OnClickListener {

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

        val dbHelper = DbHelper(mainActivity, "user.db", null, 1)
        val database = dbHelper.writableDatabase
        var query = "SELECT * FROM ftpsite;"
        var c = database.rawQuery(query, null)

        while (c.moveToNext()) {
            accountList.add(
                account(
                    c.getInt(0),
                    c.getInt(1),
                    c.getString(2),
                    c.getString(3),
                    c.getString(4),
                    c.getString(5)
                )
            )
        }

        var listviewAdapter = listviewAdapter(mainActivity, accountList)
        var listView = view.findViewById<ListView>(R.id.listView)
        listView.adapter = listviewAdapter

        val serverAdd = view.findViewById<Button>(R.id.serverAdd)
        serverAdd.setOnClickListener(this)
        dialog = ServerAddDialog(mainActivity) as ServerAddDialog
    }

    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.serverAdd -> {
                dialog.show()
            }
        }
    }
}

 

homefragment 파일에서 dialog를 호출해서 다이얼로그에서 입력받고 listview를 리로드하게구현할려고합니다

근데 ServerDialog 에서 입력받는건 되는데 notifyitemchanged()를 homefragment의 listview에 보내야되는데

어떻게 해야될지 모르겟네요.
ellrewa (260 포인트) 님이 2023년 6월 5일 질문

1개의 답변

0 추천

콜백을 이용하세요.

ServerDialog에 아래처럼 ok와 cancel 이벤트를 받을 함수를 전달하세요.

class ServerDialog(
    context: Context, 
   var onOk: (() -> Unit)? = null, 
   var onCancel:(() -> Unit)? = null
) : Dialog(context), View.OnClickListener {
    ...
    
    fun clickOk() {
        this.dismiss()
        onOk?.invoke()
    }
    fun clickCancel() {
        this.dismiss()
        onCancel?.invoke()
    }
}

 

그리고 HomeFragment에서 ServerDialog를 호출하실 때 해당 함수를 처리하시면 됩니다.

ServerDialog(
  context = requireContext(), 
  onOk = {
       // 필요한 처리
  },
 onCancel = {
       // 필요한 처리
 }
).show()

 

아니면 DialogBuilder 통해서 커스텀 레이아웃을 전달하셔서 처리하셔도 됩니다. 이렇게 하면 굳이 별도의 Dialog클래스를 만드실 필요가 없구요.

 

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