提问人:tore 提问时间:7/2/2018 最后编辑:tore 更新时间:2/15/2021 访问量:12648
如何将可变列表传递给捆绑包?
How do I pass a mutable list to a bundle?
问:
我想将可变列表添加到捆绑包中,但似乎没有办法做到这一点。
var bundle = Bundle()
bundle.put...????("LIST", fbModel.recipeArray)
您可以使用等等,但似乎没有作为选项。该怎么办?putString
putMutableList
更新忘了提到 recipeArray 是一个 .喜欢这个:mutableList
object
var recipeArray: MutableList<RecipeTemplate>
...其中 RecipeTemplate 是一个如下所示的类:
class RecipeTemplate {
var recipeHeader: String? = null
var recipeText: String? = null
var recipeImage: String? = null
var recipeKey: String? = null
}
更新根据@EpicPandaForce的回答解决了问题:
gridView.setOnItemClickListener { parent, view, position, id ->
Log.d("TAGA", "CLICKETICLICK " + position)
Log.d("TAGA", "CLICKETICLICK " + fbModel.recipeArray[1].recipeHeader) //PASSES
val intent = Intent(classContext, Recipes::class.java)
var bundle = Bundle().apply {
putParcelableArrayList("LIST", ArrayList<Parcelable>(fbModel.recipeArray))
putInt("POSITION", position)
}
intent.putExtra("bundle", bundle)
startActivity(intent)
}
但我在其他活动中仍然无法接收它。此处的代码来自 onCreate:
var passedIntent = intent.extras
var bundle: Bundle = passedIntent.getBundle("bundle")
var counter: Int = bundle.getInt("POSITION", 0)
var recipeArray: ArrayList<Parcelable> = bundle.getParcelableArrayList("LIST")
var recipeList: MutableList<RecipeTemplate> = recipeArray as MutableList<RecipeTemplate>
Log.d("TAGA", "PASSED " + counter) //PASSES
if(recipeArray != null) {
Log.d("TAGA", "HERE " + recipeArray[1].recipeHeader.toString()) //Null
Log.d("TAGA", "HERE " + recipeList[1].recipeHeader.toString()) //Null
Log.d("TAGA", "HERE " + recipeArray.size) //PASSES
}
传递并显示正确的数字。传递并显示正确的数字。但是,其他日志 和 都是 null,即使它们在放入捆绑包之前包含正确的值。我需要做些什么吗?嗯...解析列表?还是我错过了什么?counter
recipeArray.size
recipeArray[1].recipeHeader.toString()
recipeList[1].recipeHeader.toString()
答:
recipeArray 的类型是什么?您可以放置各种类型的 ArrayList(不是 List!),包括 Integers、CharSequences、Strings,以及最常见的 Parcelables。有关完整 API,请参阅文档:https://developer.android.com/reference/android/os/Bundle
这取决于您的列表中有哪些项目。 有几个方法允许您在其中放置列表,例如 putIntegerArrayList
和 putStringArrayList
。如果需要使用自定义类型,可以创建并使用 putParcelableArrayList
。Bundle
Parcelable
当然,顾名思义,所有这些方法都专门考虑实例,而不仅仅是任何.因此,您可以更改要使用的所有用法,也可以在将其放入捆绑包时从现有用法中创建一个新的用法:ArrayList
MutableList
MutableList
ArrayList
ArrayList
MutableList
bundle.putParcelableArrayList("key", ArrayList(myParcelableList))
你可以做
//apply plugin: 'kotlin-android-extensions'
//androidExtensions {
// experimental = true
//}
apply plugin: 'kotlin-parcelize'
然后
@Parcelize
class RecipeTemplate : Parcelable {
var recipeHeader: String? = null
var recipeText: String? = null
var recipeImage: String? = null
var recipeKey: String? = null
}
然后
var bundle = Bundle().apply {
putParcelableArrayList("LIST", ArrayList<Parcelable>(fbModel.recipeArray))
}
评论
@SuppressLint("ParcelCreator")
@Parcelize
getParcelableArrayList<RecipeTemplate>("LIST")
评论
RecipeTemplate is a class.
可能想要更具体