【发布时间】:2019-11-12 02:10:42
【问题描述】:
我正在尝试将数据从 2 ArrayLists(在 Fragment 中声明)推送到包含多个选项卡的 AlertDialog。选项卡名称 (myDialogTitles) 显示正确,但由于某种原因,每个选项卡下方的内容不显示,并且似乎总是仅显示来自 ArrayList (myDialogDescriptions) 中的第一项的数据。需要更改哪些内容才能使每个选项卡下的内容相应地显示正确的文本?
预期输出
选项卡 A -> 说明 A
选项卡 B -> 说明 B
选项卡 C -> 描述 C
电流输出
选项卡 A -> 说明 A
选项卡 B -> 说明 A
选项卡 C -> 描述 A
片段类
class MyFragment : androidx.fragment.app.Fragment() {
private lateinit var mRecyclerView: RecyclerView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_rv, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
val v = view
mRecyclerView = v!!.findViewById<RecyclerView>(R.id.my_recyclerview)
mRecyclerView.layoutManager = LinearLayoutManager(activity)
val myList = ArrayList<Item>()
val myDialogTitles = ArrayList<String>()
myDialogTitles.add("Tab A")
myDialogTitles.add("Tab B")
myDialogTitles.add("Tab C")
val myDialogDescriptions = ArrayList<String>()
myDialogDescriptions.add("Description A")
myDialogDescriptions.add("Description B")
myDialogDescriptions.add("Description C")
val mAdapter = MyAdapter(myList, childFragmentManager)
mRecyclerView.adapter = mAdapter
super.onActivityCreated(savedInstanceState)
}
}
对话框类
class TabbedDialog(private val facilitiesList: ArrayList<Facility>,
private val myDialogTitles: ArrayList<String>,
private val myDialogDescriptions: ArrayList<String>) : DialogFragment() {
lateinit var customView: View
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return customView
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val b = AlertDialog.Builder(activity)
.setIconAttribute(R.attr.imgNight)
.setTitle(facilitiesList[id].textFacilityADialogTitle)
.setPositiveButton(getString(android.R.string.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 = MyViewPagerAdapter(childFragmentManager)
for (item in myDialogTitles) {
adapter.addFragment(item, FragmentDialogContent.createInstance(myDialogDescriptions[id]))
}
viewPager.adapter = adapter
tabLayout.setupWithViewPager(viewPager)
b.setView(customView)
return b.create()
}
}
查看寻呼机适配器类
class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT){
private val titleList : MutableList<String> = ArrayList()
private val fragmentList : MutableList<Fragment> = ArrayList()
override fun getItem(position: Int): Fragment {
return fragmentList[position]
}
override fun getCount(): Int {
return fragmentList.size
}
fun addFragment(title: String, fragment: Fragment){
titleList.add(title)
fragmentList.add(fragment)
}
override fun getPageTitle(position: Int): CharSequence? {
return titleList[position]
}
}
物品数据类
data class Item (val myDialogTitle: String, val myDialogDescription: String)
【问题讨论】:
-
请提供更多细节。
FragmentDialogContent的定义在哪里? -
@djhs16 在
TabbedDialog类中。在onCreateDialog函数的底部附近。
标签: android for-loop arraylist kotlin