【问题标题】:Data from multiple ArrayLists not not being pushed correctly来自多个 ArrayLists 的数据未正确推送
【发布时间】: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


【解决方案1】:

替换 TabbedDialog 中的 for 循环

for (item in myDialogTitles) {
    adapter.addFragment(item, FragmentDialogContent.createInstance(myDialogDescriptions[id]))
}

myDialogTitles.forEachIndexed { index, item->
    adapter.addFragment(item, FragmentDialogContent.createInstance(myDialogDescriptions[index]))
}

问题是您使用id 作为索引。

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2023-04-06
    • 2013-12-02
    • 1970-01-01
    • 2016-11-05
    • 2016-04-25
    相关资源
    最近更新 更多