如何将数据从主机片段传递到 kotlin 中的对话片段?
How to can I pass data from a host fragment to dialog fragment in kotlin?
我有一个 RecylcerView,单击该视图应该将用户带到一个对话框片段,用户可以在其中编辑视图的内容。因此,我需要将数据作为数据 class DressMeasurementModel 从主机片段传递到 dailog 片段。
我怎样才能做到这一点?
// This property is only valid between onCreateView and onDestroyView.
private val binding get() = _binding!!
private lateinit var addMeasurementFab: FloatingActionButton
private lateinit var display:TextView
private lateinit var myAdapter: AddMeasurementAdapter
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
_binding = MeasurementsFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val recyclerView = binding.measurementsFragmentRecyclerView
myAdapter = AddMeasurementAdapter(currentList,this@MeasurementsFragment, this@MeasurementsFragment)
recyclerView.adapter = myAdapter
recyclerView.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
}
override fun onItemClicked1(dressMeasurementModel: DressMeasurementModel) {
val data = DressMeasurementModel(dressMeasurementModel.measurementName, dressMeasurementModel.measurement)
val bundle = bundleOf("editData" to data)
setFragmentResult("editData_key", bundle)
EditMeasurementDialogFragment().show(childFragmentManager, "Dialog tag")
}
}
让您的对话框 class 具有您想要数据的构造函数:
class EditMeasurementDialogFragment(data: DressMeasurementModel)
您可以像下面这样在构造函数中传递它:
val data = DressMeasurementModel(dressMeasurementModel.measurementName, dressMeasurementModel.measurement)
EditMeasurementDialogFragment(data).show(childFragmentManager, "Dialog tag")
add this into your dialog fragment
companion object {
private const val ITEMS = "data"
fun newInstance(data : DressMeasurementModel): EditMeasurementDialogFragment= EditMeasurementDialogFragment().apply {
arguments = Bundle().apply {
putString(ITEMS, Gson().toJson(data))
}
}
}
并从您的片段中调用此片段对话框
val dialog = EditMeasurementDialogFragment.newInstance(items)
dialog.show(childFragmentManager, "dialog")
// 在开始或创建时将参数添加到对话框片段中
val data = argument?.getString(ITEMS)
val model = Gson().fromJson(data,DressMeasurementModel::class.java)
// 或者您可以简单地将模型或数据传递到主要构造中,例如
class EditMeasurementDialogFragment(data: DressMeasurementModel)
我有一个 RecylcerView,单击该视图应该将用户带到一个对话框片段,用户可以在其中编辑视图的内容。因此,我需要将数据作为数据 class DressMeasurementModel 从主机片段传递到 dailog 片段。
我怎样才能做到这一点?
// This property is only valid between onCreateView and onDestroyView.
private val binding get() = _binding!!
private lateinit var addMeasurementFab: FloatingActionButton
private lateinit var display:TextView
private lateinit var myAdapter: AddMeasurementAdapter
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
_binding = MeasurementsFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val recyclerView = binding.measurementsFragmentRecyclerView
myAdapter = AddMeasurementAdapter(currentList,this@MeasurementsFragment, this@MeasurementsFragment)
recyclerView.adapter = myAdapter
recyclerView.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
}
override fun onItemClicked1(dressMeasurementModel: DressMeasurementModel) {
val data = DressMeasurementModel(dressMeasurementModel.measurementName, dressMeasurementModel.measurement)
val bundle = bundleOf("editData" to data)
setFragmentResult("editData_key", bundle)
EditMeasurementDialogFragment().show(childFragmentManager, "Dialog tag")
}
}
让您的对话框 class 具有您想要数据的构造函数:
class EditMeasurementDialogFragment(data: DressMeasurementModel)
您可以像下面这样在构造函数中传递它:
val data = DressMeasurementModel(dressMeasurementModel.measurementName, dressMeasurementModel.measurement)
EditMeasurementDialogFragment(data).show(childFragmentManager, "Dialog tag")
add this into your dialog fragment
companion object {
private const val ITEMS = "data"
fun newInstance(data : DressMeasurementModel): EditMeasurementDialogFragment= EditMeasurementDialogFragment().apply {
arguments = Bundle().apply {
putString(ITEMS, Gson().toJson(data))
}
}
}
并从您的片段中调用此片段对话框
val dialog = EditMeasurementDialogFragment.newInstance(items)
dialog.show(childFragmentManager, "dialog")
// 在开始或创建时将参数添加到对话框片段中
val data = argument?.getString(ITEMS)
val model = Gson().fromJson(data,DressMeasurementModel::class.java)
// 或者您可以简单地将模型或数据传递到主要构造中,例如
class EditMeasurementDialogFragment(data: DressMeasurementModel)