如何将App模块Fragment的EditText数据传递至另一模块的Kotlin类
跨模块传递EditText内容到相机类的实现方案
下面是几种简单直接的实现方式,适配不同场景需求:
方案1:构造函数直接传参
这是最直观的方式,适用于相机类实例化时就能确定输入内容的场景。
相机模块的CameraHelper类
// 位于相机模块的Kotlin类 class CameraHelper( private val input1: String, private val input2: String, private val input3: String ) { fun takePhoto() { // 在这里使用传入的输入内容执行拍照逻辑 println("拍照携带参数:$input1 | $input2 | $input3") } }
App模块的Fragment代码
class MyFragment : Fragment() { private lateinit var etInput1: EditText private lateinit var etInput2: EditText private lateinit var etInput3: EditText override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_my, container, false) etInput1 = view.findViewById(R.id.et_input1) etInput2 = view.findViewById(R.id.et_input2) etInput3 = view.findViewById(R.id.et_input3) return view } // 点击拍照按钮时触发 private fun launchCamera() { // 获取EditText输入内容 val content1 = etInput1.text.toString().trim() val content2 = etInput2.text.toString().trim() val content3 = etInput3.text.toString().trim() // 实例化跨模块相机类并传参 val cameraHelper = CameraHelper(content1, content2, content3) cameraHelper.takePhoto() } }
模块依赖配置
在App模块的build.gradle中添加对相机模块的依赖:
dependencies { implementation project(":camera") // 替换为你的相机模块名称 }
方案2:Setter方法动态传参
如果相机类已经提前实例化,或者需要后续更新输入内容,用Setter方法更灵活。
相机模块的CameraHelper类
class CameraHelper { private var input1: String = "" private var input2: String = "" private var input3: String = "" fun setInputParams(input1: String, input2: String, input3: String) { this.input1 = input1 this.input2 = input2 this.input3 = input3 } fun takePhoto() { println("拍照携带参数:$input1 | $input2 | $input3") } }
App模块的Fragment代码
class MyFragment : Fragment() { // 提前初始化相机类实例 private val cameraHelper = CameraHelper() // ... 省略EditText初始化代码 private fun launchCamera() { val content1 = etInput1.text.toString().trim() val content2 = etInput2.text.toString().trim() val content3 = etInput3.text.toString().trim() // 动态设置参数 cameraHelper.setInputParams(content1, content2, content3) cameraHelper.takePhoto() } }
方案3:数据类封装参数(优雅适配多参数场景)
如果后续可能增加更多参数,用数据类封装可以避免方法参数过于冗长。
相机模块定义数据类和CameraHelper
// 封装输入参数的数据类 data class CameraInputParams( val input1: String, val input2: String, val input3: String ) class CameraHelper(private val params: CameraInputParams) { fun takePhoto() { println("拍照携带参数:${params.input1} | ${params.input2} | ${params.input3}") } }
App模块的Fragment代码
private fun launchCamera() { val params = CameraInputParams( etInput1.text.toString().trim(), etInput2.text.toString().trim(), etInput3.text.toString().trim() ) val cameraHelper = CameraHelper(params) cameraHelper.takePhoto() }
注意事项
- 确保模块依赖关系正确:App模块必须依赖相机模块,避免出现类找不到的问题。
- 输入内容校验:传递前建议对EditText内容做非空、格式校验,避免无效数据影响相机逻辑。
- 避免循环依赖:如果相机模块需要回调App模块的UI更新,建议定义接口让Fragment实现,不要让相机模块直接依赖App模块。
内容的提问来源于stack exchange,提问作者Abhas Kumar
相关产品推荐
相关产品推荐

