android-fragments 如何在Activity中访问编写在片段中的函数

bxpogfeg  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(108)

我在一个片段中创建了一个函数,它从片段的UI中获取数据。我希望在我的主Activity中访问它,以便将数据存储在cloud firestore中
这是在片段中重写函数fun onViewCreated(视图:视图,已保存示例状态:Bundle?){ super.onViewCreated(视图,已保存示例状态)

fun getData(){
        var dairyMealStock: Int = view?.findViewById<EditText>(R.id.et_dairy_meal_stock)?.text.toString().toInt()
        var dairyMealDuration: Int = view?.findViewById<EditText>(R.id.et_dairy_meal_used)?.text.toString().toInt()
        var maizeCharmStock: Int = view?.findViewById<EditText>(R.id.et_maize_charm_stock)?.text.toString().toInt()
        var maizeCharmDuration: Int = view?.findViewById<EditText>(R.id.et_maize_charm_used)?.text.toString().toInt()
        var wheatBrandStock: Int = view?.findViewById<EditText>(R.id.et_wheat_brand_stock)?.text.toString().toInt()
        var wheatBrandDuration: Int = view?.findViewById<EditText>(R.id.et_wheat_brand_used)?.text.toString().toInt()
        var maizeBrandStock: Int = view?.findViewById<EditText>(R.id.et_maize_brand_stock)?.text.toString().toInt()
        var maizeBrandDuration: Int = view?.findViewById<EditText>(R.id.et_maize_brand_used)?.text.toString().toInt()
        var cottonCakeStock: Int = view?.findViewById<EditText>(R.id.et_cotton_cake_stock)?.text.toString().toInt()
        var cottonCakeDuration : Int = view?.findViewById<EditText>(R.id.et_cotton_cake_used)?.text.toString().toInt()
        var pyrethrumStock: Int = view?.findViewById<EditText>(R.id.et_pyrethrum_stock)?.text.toString().toInt()
        var pyrethrumDuration: Int = view?.findViewById<EditText>(R.id.et_pyrethrum_used)?.text.toString().toInt()
        var dcpStock: Int = view?.findViewById<EditText>(R.id.et_D_C_P_stock)?.text.toString().toInt()
        var dcpDuration: Int = view?.findViewById<EditText>(R.id.et_D_C_P_duration)?.text.toString().toInt()
        var blockStock: Int = view?.findViewById<EditText>(R.id.et_block_stock)?.text.toString().toInt()
        var blockDuration: Int = view?.findViewById<EditText>(R.id.et_Block_duration)?.text.toString().toInt()
        var jotoStock: Int = view?.findViewById<EditText>(R.id.et_joto_stock)?.text.toString().toInt()
        var jotoDuration: Int = view?.findViewById<EditText>(R.id.et_joto_duration)?.text.toString().toInt()
        var yaMaziwaStock: Int =view?.findViewById<EditText>(R.id.et_ya_maziwa_stock)?.text.toString().toInt()
        var yaMaziwaDuration: Int = view?.findViewById<EditText>(R.id.et_ya_maziwa_duration)?.text.toString().toInt()
        var allPurposeStock: Int = view?.findViewById<EditText>(R.id.et_all_purpose_stock)?.text.toString().toInt()
        var allPurposeDuration: Int = view?.findViewById<EditText>(R.id.et_all_purpose_duration)?.text.toString().toInt()
    }
}
btxsgosb

btxsgosb1#

你必须使用一个接口来做到这一点。
1.首先定义接口

interface PassingDataCallback{
fun passData(str:String)
}

2 .在片段中重写onAttach,然后定义回调函数
例如

callback = when {
activity is MainActivity -> {
activity as MainActivity
}
context is MainActivity -> {
context
}

else -> {
throw RuntimeException ("Activity must implement callback");
}
}

1.在您的Activity中实现这个回调函数并重写这些方法。

bwleehnv

bwleehnv2#

您可以使用activityViewModel并将数据存储在那里,这样Activity和fragment都可以访问相同的数据。

相关问题