我在一些片段中创建自定义对话框,但我想出了一个基本片段来使用,然后从儿童片段调用。例如,我有10个片段,其中只有3个片段在使用它。移动带有基本片段的对话框是很好的,我只是不需要重新创建它。"任何影响到这里的事对我来说都是好事"如内聚性、耦合性、性能、体系结构等
nwnhqdif1#
这是一个基于观点的主题,但我认为“组合优于继承”是OOP领域中相当普遍接受的建议。您所做的事情在性能方面并不重要,但对于代码可维护性来说,这是一个糟糕的解决方案。一些相关的东西要读:
在这种情况下,要在没有继承的情况下执行此操作,您可以使用返回对话框的相关参数创建一个顶级扩展函数。
fun Fragment.showANumberDialog(theNumber: Int): AlertDialog = AlertDialog.Builder(requireContext()) .setTitle(theNumber.toString()) .setPositiveButton(android.R.string.ok) {} .show()
注意:你应该使用DialogFragment而不是一个空的对话框,这样在屏幕旋转后,以及在后台运行一段时间后返回应用程序时,对话框都会保持不变。因此,上面的例子看起来更合适:
fun Fragment.showANumberDialog(theNumber: Int) = ANumberDialogFragment().apply { arguments = bundleOf(NUM_KEY to theNumber.toString()) show(childFragmentManager, ANumberDialogFragment.TAG) } private const val NUM_KEY = "the number" class ANumberDialogFragment : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = AlertDialog.Builder(requireContext()) .setTitle(arguments.getString(NUM_KEY)) .setPositiveButton(android.R.string.ok) {} .show() companion object { const val TAG = "ANumberDialogFragment" } }
1条答案
按热度按时间nwnhqdif1#
这是一个基于观点的主题,但我认为“组合优于继承”是OOP领域中相当普遍接受的建议。
您所做的事情在性能方面并不重要,但对于代码可维护性来说,这是一个糟糕的解决方案。
一些相关的东西要读:
在这种情况下,要在没有继承的情况下执行此操作,您可以使用返回对话框的相关参数创建一个顶级扩展函数。
注意:你应该使用DialogFragment而不是一个空的对话框,这样在屏幕旋转后,以及在后台运行一段时间后返回应用程序时,对话框都会保持不变。因此,上面的例子看起来更合适: