我在主要活动中使用了片段,我想将自定义类“ TaskWithUserAndProfile
”的对象发送到TaskDetailsFragment
我发现您可以使用Bundle
并使其发送字符串,但是当我尝试使用Parcebale
发送时,事情变得很复杂。
这是我的代码中的一些部分,可以更好地理解:
TaskWithUserAndProfile.kt
class TaskWithUserAndProfile() : Parcelable{
override fun writeToParcel(p0: Parcel?, p1: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
var profile = Profile()
var task = Task()
var user = User()
constructor(parcel: Parcel) : this() {
//profile = parcel.read
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<TaskWithUserAndProfile> {
override fun createFromParcel(parcel: Parcel): TaskWithUserAndProfile {
return TaskWithUserAndProfile(parcel)
}
override fun newArray(size: Int): Array<TaskWithUserAndProfile?> {
return arrayOfNulls(size)
}
}
}
HomeFragment.kt
//Inside onCreateView
adapter = TasksAdapter(tasksArray) { item ->
println(item.profile)
val bundle = Bundle()
bundle.putParcelable("MyItem", item)
val taskDetailsFragment = TaskDetailsFragment()
taskDetailsFragment.arguments = bundle
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.container, taskDetailsFragment)
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
}
实现Parcebale的类的外观应该如何,然后如何分段发送和接收item对象?
答案 0 :(得分:1)
如果您想继续使用宗地化,只需尝试以下示例:
@Parcelize
data class TaskWithUserAndProfile(var profile:Profile, var task :Task, var user:User) : Parcelable{}
我可能会从您的类中遗漏一些东西,但是这个主意应该看起来像这样,所以请使用批注@Parcelize和Parcelable实现(不需要覆盖任何方法)。
Update
感谢您的提醒。您必须将其添加到gradle文件中:
androidExtensions {
experimental = true
}
答案 1 :(得分:0)
答案 2 :(得分:0)
您甚至不需要使用for first_data, second_data in zip(first, second):
f = get_or_create_node(first_data, values[first_data - 1])
s = get_or_create_node(second_data, values[second_data - 1])
f.addChild(s.data)
print(f"First: {f.data} Value: {f.value} Children: {f.children}")
,只需在Parcelable
中定义一个TaskWithUserAndProfile
变量并在TaskDetailsFragment
中进行设置即可。
TaskDetailsFragment.kt
HomeFragment
HomeFragment.kt
class TaskDetailsFragment : Fragment() {
var selectedTask: TaskWithUserAndProfile? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
}
}