将对象列表传递给片段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将对象列表传递给片段相关的知识,希望对你有一定的参考价值。

class CholesterolPagingFragment: Fragment() {

    companion object {
        fun newInstance(): CholesterolPagingFragment {
            val args = Bundle()
            val fragment = CholesterolPagingFragment()
            fragment.arguments = args
            return fragment
        }
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view = inflater.inflate(R.layout.fragment_paging_cholesterol, container, false)

        return view
    }

}

我在Kotlin中编写了上面的代码来初始化一个片段。虽然我无法找到将对象列表(例如:List<Human>)传递给此片段的方法。我尝试过Bundle()但找不到合适的方法。

答案

您可以将List<Human>作为Parcelable ArrayList传递给Bundle,如下所示:

 companion object {
    fun newInstance(myList : ArrayList<Human>): MyFragment {
        val args = Bundle()
        args.putParcelableArrayList("list",myList);
        val fragment = MyFragment()
        fragment.arguments = args
        return fragment
    }
}

要检索数据:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val args = arguments
    var myList : ArrayList<Human> = args.getParcelableArrayList<Human>("list")
}

Parcelable数据类中执行Human

data class Human(val name: String, val phone: String) : Parcelable {
    constructor(parcel: Parcel) : this(
            parcel.readString(),
            parcel.readString()) {
    }

    override fun writeToParcel(dest: Parcel?, flags: Int) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun describeContents(): Int {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    companion object CREATOR : Parcelable.Creator<Human> {
        override fun createFromParcel(parcel: Parcel): Human {
            return Human(parcel)
        }

        override fun newArray(size: Int): Array<Human?> {
            return arrayOfNulls(size)
        }
    }
}

以上是关于将对象列表传递给片段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用对象列表在片段中实现newinstace模式[重复]

如何将值从其他活动传递给 viewpager 片段?

如何将数据从片段传递到对话框片段

如何将图像视图从改造加载的片段传递给子片段?

将 JSON 字符串从片段传递到适配器的问题

将数据从片段列表视图项传递到活动字符串变量 onitemclicklistener