1. 程式人生 > >kotlin安卓開發:fragment向activity傳遞資料通過handler,設定回撥方法

kotlin安卓開發:fragment向activity傳遞資料通過handler,設定回撥方法

從activity向fragment傳遞就比較方便了,直接用:

 fg.arguments = arguments

現在看看怎麼從fragment向activity傳遞資料。

比如說,我們在一個ViewPage裡面設定了若干個fragment,fragment裡面有一個按鈕,提交相關當前fg下標給viewPage所在的activity,刪除當前的fg。

這裡使用了handler,提交完資訊,activity就立即更新UI

首先我們在fg中寫一個介面

interface Callbacks{

        fun onRemove(position:Int){

        }
    }

讓我們的activity實現該介面:如果未實現,則丟擲異常,這裡在fg中有一個attach方法,是載入fg時候自動呼叫的。

override fun onAttach(context: Context?) {
        if(context !is Callbacks){
            throw IllegalStateException("介面未實現")
        }
        super.onAttach(context)
        mcallbacks = context

    }

然後我們在給fg的按鈕新增監聽器,呼叫該方法。

  mcallbacks!!.onRemove(position)

 

現在是空的方法。

我們在activity給它實現以下:

 這裡我們看到接收來自fg的下標。

這裡接收fg傳過來的下標。

在主活動的handler可以接收下標

//主活動繼承介面,實現回撥方法
    override fun onRemove(position:Int) {

        val msg  = Message()
        msg.what = 1
        msg.arg1 = position
        handle?.sendMessage(msg)
        Log.d("callback:",msg.what.toString())

    }

 看看主活動的handler:接收是msg.what的值。

 ···1->{

                        list_fg.removeAt(msg.arg1)
                        Log.d("msg:",msg.arg1.toString())
                        iwh_view_page_adapter.notifyDataSetChanged()
                    }···

 接收到下標後,通知介面卡更新。