【发布时间】:2019-03-15 21:55:51
【问题描述】:
我有一个 Fragment 和 2 个包含 Strings 的 ArrayLists,我想从 Fragment 传递以在 DialogFragment 中显示一些信息。但是,我目前不知道应该使用什么代码来实现这个目标。我尝试将private val myListTitles: ArrayList<String>, private val myListDescriptions: ArrayList<String> 添加到片段类的构造函数中,但这不起作用。实现for 循环并获取每个项目的位置而不是逐个硬编码每个项目的正确方法是什么?
片段类
class MyFragment : androidx.fragment.app.Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.my_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
val myListTitles = ArrayList<String>()
myListTitles.add("Tab A")
myListTitles.add("Tab B")
myListTitles.add("Tab C")
val myListDescriptions = ArrayList<String>()
myListDescriptions.add("Description A")
myListDescriptions.add("Description B")
myListDescriptions.add("Description C")
super.onActivityCreated(savedInstanceState)
}
}
DialogFragment 类
class TabbedDialog : DialogFragment(private val myListTitles: ArrayList<String>, private val myListDescriptions: ArrayList<String>) {
lateinit var customView: View
private var myListTitles = myList.toMutableList()
private var myListDescriptions = myList.toMutableList()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return customView
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val b = AlertDialog.Builder(activity)
.setTitle("Dialog Title")
.setPositiveButton("OK") { dialog, _ -> dialog.dismiss() }
customView = activity!!.layoutInflater.inflate(R.layout.fragment_dialog, null)
val tabLayout = customView.findViewById<TabLayout>(R.id.mTabLayout)
val viewPager = customView.findViewById<ViewPager>(R.id.mViewPager)
val adapter = TabbedDialogAdapter(childFragmentManager)
adapter.addFragment("Tab A", TabbedDialogFragment.createInstance("Description A"))
adapter.addFragment("Tab B", TabbedDialogFragment.createInstance("Description B"))
adapter.addFragment("Tab C", TabbedDialogFragment.createInstance("Description C"))
val adapter = TabbedDialogAdapter(childFragmentManager)
for (item in myList) {
// ¿What goes here?
// My guess
// adapter.addFragment(myListTitles[position], TabbedDialogFragment.createInstance(myListDescriptions[position]))
}
viewPager.adapter = adapter
tabLayout.setupWithViewPager(viewPager)
b.setView(customView)
return b.create()
}
}
【问题讨论】:
标签: android android-fragments kotlin android-adapter android-dialogfragment