【问题标题】:Passing List of Objects to Fragment将对象列表传递给片段
【发布时间】:2017-12-26 17:45:02
【问题描述】:
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 传递给上述代码的位置?

标签: android android-fragments kotlin android-bundle


【解决方案1】:

您可以将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")
}

Human数据类中实现Parcelable

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)
        }
    }
}

【讨论】:

  • 类型不匹配错误伴随Required: java.util.ArrayList&lt;out Parcelable!&gt;!Found: kotlin.collections.ArrayList&lt;Human&gt;
  • 在 Human 类中执行 Parcelable 实现。现在检查我编辑的答案。
  • 如果您遇到类型不匹配错误,您可以查看下面的链接stackoverflow.com/a/50152749/7329399
  • 我在调用参数时仍然得到空指针?.getParcelableArrayList(Constant.EXTRA_COURSE_LIST_MATERI)
猜你喜欢
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2015-06-21
  • 1970-01-01
  • 2017-02-03
  • 2011-12-18
  • 2022-01-01
相关资源
最近更新 更多