web-dev-qa-db-ja.com

変更可能なリストをバンドルに渡すにはどうすればよいですか?

バンドルに可変リストを追加したいのですが、これを実現する方法がないようです。

_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です。ええと...リストを解析解除するために何かしなければならないことはありますか?それとも何か不足していますか?

6
tore

これは、リストにあるアイテムによって異なります。 Bundleには、リストを配置できるいくつかのメソッドがあります。たとえば、 putIntegerArrayList および putStringArrayList です。カスタムタイプを使用する必要がある場合は、それをParcelableにして putParcelableArrayList を使用できます。

もちろん、これらすべてのメソッドは、その名前が示すとおり、ArrayListだけではなく、MutableListインスタンスを具体的に取得します。したがって、代わりにすべてのMutableListの使用法を変更してArrayListを使用するか、または既存のArrayListから新しいMutableListを作成して、バンドル内:

bundle.putParcelableArrayList("key", ArrayList(myParcelableList))
1
zsmb13

RecipeArrayのタイプは何ですか?整数、CharSequences、文字列、そして最も一般的にはParcelableを含む、さまざまな種類のArrayList(リストではありません!)を置くことができます。完全なAPIについては、ドキュメントを参照してください。 https://developer.Android.com/reference/Android/os/Bundle

0
AutonomousApps