#android #arraylist #kotlin #android-adapter #android-dialogfragment
#Android #arraylist #kotlin #android-адаптер #android-dialogfragment
Вопрос:
Я пытаюсь показать разное содержимое для разных вкладок в моем DialogFragment
, но по какой-то причине текст содержимого продолжает повторять первый элемент независимо от выбранной вкладки. Однако названия вкладок отображаются точно так, как и ожидалось. Я полагаю, что проблема заключается в DialogFragment
классе, внутри for
цикла вокруг createInstance
, но я не знаю, что нужно изменить в этой области.
Ожидаемый результат
- Вкладка A с описанием A
- Вкладка B с описанием B
- Вкладка C с описанием C
Текущий результат
- На всех вкладках отображается описание
Класс элемента
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 MyDialog(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, MyDialog.createInstance(myListDescriptions[id]))
}
b.setView(customView)
return b.create()
}
companion object {
fun createInstance(txt: String): MyDialog {
val fragment = MyDialog()
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)
}
}
Комментарии:
1. 1. Пожалуйста, поделитесь телом MyDialog.CreateInstance() 2. Где используется MyFragment?
2. @RishabhJain Что ты подразумеваешь под
MyDialog.createInstance() body
?3. где вы определили метод CreateInstance() в MyDialog
4. В
onCreateDialog
5. Где я должен это определить, если вы считаете, что это неправильно?