2017-12-26 13 views
0
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 
    } 

} 

Ich habe den obigen Code in Kotlin ein Fragment zu initialisieren schrieb. Obwohl ich keine Möglichkeit finde, eine Liste von Objekten (zB: List<Human>) an dieses Fragment zu übergeben. Ich habe es mit der Bundle() versucht, konnte aber keinen richtigen Weg finden.Passing Liste der Objekte fragmentieren

+0

wo übergeben Sie den obigen Code? –

Antwort

5

Sie können List<Human> als ParcelableArrayList zum Bundle passieren wie folgt:

companion object { 
    fun newInstance(myList : ArrayList<Human>): MyFragment { 
     val args = Bundle() 
     args.putParcelableArrayList("list",myList); 
     val fragment = MyFragment() 
     fragment.arguments = args 
     return fragment 
    } 
} 

Daten abzurufen:

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 

    val args = arguments 
    var myList : ArrayList<Human> = args.getParcelableArrayList<Human>("list") 
} 

Sie Parcelable Implementierung in Human Datenklasse:

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

Typ nicht übereinstimmenden Fehler kommt mit 'Erforderlich: java.util.ArrayList !' Aber 'Gefunden: kotlin.collections.ArrayList ' – kokilayaa

+0

Do Parcelable Implementierung in der menschlichen Klasse. Überprüfen Sie meine bearbeitete Antwort jetzt. –