Как получить параметры объекта Parcelable в отдельном действии? - PullRequest
0 голосов
/ 06 октября 2018

Я хотел бы иметь возможность получить индивидуальные параметры моего объекта, который можно описать в следующем упражнении.Я считаю, что я использую правильный метод, просто не понимаю, как выводить входные параметры параметра один раз во втором упражнении.

My MainActivty.kt:

package com.example.favouritefood

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageButton

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val food1: ImageButton = findViewById(R.id.imageButtonFood1)
        val food2: ImageButton = findViewById(R.id.imageButtonFood2)
        val food3: ImageButton = findViewById(R.id.imageButtonFood3)
        val food4: ImageButton = findViewById(R.id.imageButtonFood4)

        val pizza = Food(
                "Pizza", "www.test.com", "Italy, Tomato",
                "1/1/2018", "pizza@mail.com", 5)

        food1.setOnClickListener()
        {
            val intent = Intent(this, MetaDataActivity::class.java).apply {
                putExtra("Food", pizza)
            }
            startActivity(intent)
        }
    }
}

Мое второе задание (для получения посылки):

package com.example.favouritefood

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.os.Parcelable
import android.widget.EditText

class MetaDataActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_meta_data)

        val name: EditText = findViewById(R.id.editTextName)

        val food = intent.getParcelableExtra("Food") as Parcelable

        val test = food.writeToParcel(food, 0)

        name.setText(test.toString())
    }
}

Где food.wrtieToParcel(food, 0) выбрасывает несоответствие типов Required: Parcel!Найдено: может быть обработано за food.

Как бы я прочитал параметры объекта?

Мой класс объекта для справки:

package com.example.favouritefood

import android.os.Parcel
import android.os.Parcelable

class Food(val name: String?, val location: String?, val keywords: String?, val date: String?, val email: String?, val rating: Int) : Parcelable {
    constructor(parcel: Parcel) : this(
            parcel.readString(),
            parcel.readString(),
            parcel.readString(),
            parcel.readString(),
            parcel.readString(),
            parcel.readInt()) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(name)
        parcel.writeString(location)
        parcel.writeString(keywords)
        parcel.writeString(date)
        parcel.writeString(email)
        parcel.writeInt(rating)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<Food> {
        override fun createFromParcel(parcel: Parcel): Food {
            return Food(parcel)
        }

        override fun newArray(size: Int): Array<Food?> {
            return arrayOfNulls(size)
        }
    }
}

1 Ответ

0 голосов
/ 06 октября 2018

Вам не нужно звонить val test = food.writeToParcel(food, 0).

, используйте val food = intent.getParcelableExtra("Food") as Food вместо.

...