バンドルに可変リストを追加したいのですが、これを実現する方法がないようです。
_var bundle = Bundle()
bundle.put...????("LIST", fbModel.recipeArray)
_
putString
などを使用できますが、オプションとしてputMutableList
がないようです。何をすべきか?
[〜#〜] update [〜#〜]mutableList
RecipeArrayがobject
。このような:
_var recipeArray: MutableList<RecipeTemplate>
_
... RecipeTemplateは次のようなクラスです。
_class RecipeTemplate {
var recipeHeader: String? = null
var recipeText: String? = null
var recipeImage: String? = null
var recipeKey: String? = null
}
_
[〜#〜] update [〜#〜] @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
}
_
counter
が渡され、正しい番号が表示されます。 _recipeArray.size
_が渡され、正しい数が表示されます。ただし、他のログrecipeArray[1].recipeHeader.toString()
およびrecipeList[1].recipeHeader.toString()
は、バンドルに入れられる前に正しい値が含まれていても、どちらもnullです。ええと...リストを解析解除するために何かしなければならないことはありますか?それとも何か不足していますか?
これは、リストにあるアイテムによって異なります。 Bundle
には、リストを配置できるいくつかのメソッドがあります。たとえば、 putIntegerArrayList
および putStringArrayList
です。カスタムタイプを使用する必要がある場合は、それをParcelable
にして putParcelableArrayList
を使用できます。
もちろん、これらすべてのメソッドは、その名前が示すとおり、ArrayList
だけではなく、MutableList
インスタンスを具体的に取得します。したがって、代わりにすべてのMutableList
の使用法を変更してArrayList
を使用するか、または既存のArrayList
から新しいMutableList
を作成して、バンドル内:
bundle.putParcelableArrayList("key", ArrayList(myParcelableList))
RecipeArrayのタイプは何ですか?整数、CharSequences、文字列、そして最も一般的にはParcelableを含む、さまざまな種類のArrayList(リストではありません!)を置くことができます。完全なAPIについては、ドキュメントを参照してください。 https://developer.Android.com/reference/Android/os/Bundle