【发布时间】:2019-09-24 09:04:47
【问题描述】:
我试图在我的DialogFragment 中为不同的选项卡显示不同的内容,但由于某种原因,无论选择哪个选项卡,内容文本都会不断重复第一项。选项卡名称按预期正确显示。我认为问题在于DialogFragment 类,在createInstance 周围的for 循环内,但我不知道该区域需要更改什么。
我可以用什么来代替myListDescriptions[id] 中的id?
for (item in myListTitles) {
adapter.addFragment(id, FragmentDialogContent.createInstance(myListDescriptions[id]))
}
预期结果
- 标签 A 和 描述 A
- 标签 B 和 描述 B
- 标签 C 和 描述 C
当前结果
- 所有标签显示描述A
物品类
data class Item (val myDialogTitle: String,
val myDialogDescription: String)
适配器类
class MyDialogAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {
private var mTitleCollection: MutableList<String> = ArrayList()
private var mFragmentCollection: MutableList<Fragment> = ArrayList()
fun addFragment(title: String, fragment: Fragment) {
mTitleCollection.add(title)
mFragmentCollection.add(fragment)
}
override fun getPageTitle(position: Int): CharSequence? {
return mTitleCollection[position]
}
override fun getItem(position: Int): Fragment {
return mFragmentCollection[position]
}
override fun getCount(): Int {
return mFragmentCollection.size
}
}
DialogFragment 类
class FragmentDialogContent(val myList: ArrayList<Item>) : DialogFragment() {
private var mText = ""
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(getString(android.R.string.ok)) { dialog, _ -> dialog.dismiss() }
val adapter = MyDialogAdapter(childFragmentManager)
for (item in myListTitles) {
adapter.addFragment(id, FragmentDialogContent.createInstance(myListDescriptions[id]))
}
b.setView(customView)
return b.create()
}
companion object {
fun createInstance(txt: String): FragmentDialogContent {
val fragment = FragmentDialogContent()
fragment.mText = txt
return fragment
}
}
}
片段类
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 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")
val mAdapter = MyAdapter(myList, childFragmentManager)
mRecyclerView.adapter = mAdapter
super.onActivityCreated(savedInstanceState)
}
}
以前使用的代码
【问题讨论】:
标签: android for-loop arraylist kotlin