Как я могу отправить только список из нескольких выбранных элементов в другое действие с помощью намерения? - PullRequest
0 голосов
/ 13 июля 2020

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

Это код, в котором я беру добавленное блюда в массиве.

 val desc = dishList[position]
        holder.txtDishName.text = desc.desName
        holder.txtCost_for_one.text = desc.desCost_for_one
        holder.btnAdd.setOnClickListener {
            if (holder.btnAdd.text == "ADD") {
                val obj = Cart(
                    desc.id,
                    desc.desName,
                    desc.desCost_for_one,
                    desc.restaurant_id
                )
                addToCart.add(obj)
                holder.btnAdd.text = "Remove"
                val favColor = ContextCompat.getColor(this.context, R.color.colorPrimary)
                holder.btnAdd.setBackgroundColor(favColor)

            } else{
               for (i in 0 until addToCart.size ){
                   if (addToCart[i].cId == desc.id){
                       addToCart.removeAt(i)
                   }
               }
                holder.btnAdd.text = "Add"
                val favColor = ContextCompat.getColor(this.context, R.color.colorAccent)
                holder.btnAdd.setBackgroundColor(favColor)
            }
            val intent = Intent(context, DescriptionActivity::class.java)
            intent.putExtra("addToCart",addToCart)
            

        }
        
    }

Это код, в котором я нажимаю кнопку перехода к корзине.

btnProceed.setOnClickListener {
            val intent = Intent(this, CartActivity::class.java)
            //intent.getStringArrayExtra("addToCart")
            intent.getStringExtra("addToCart")
            startActivity(intent)

Но после запуска приложения CartActivity становится пустым.

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Если вы хотите использовать строку, я думаю, вам следует преобразовать свой список в json.

Например, используйте Gson

var gson = Gson()
val myObject = myObject(...)
val jsonString = gson.toJson(myObject)
intent.putExtra("myObjectKey", jsonString)

И после этого вы можете получить строку типа

val jsonString = intent.getStringExtra("myObjectKey")
var myObject = gson.fromJson(jsonString, myObject::class.java)

Для использования Gson

implementation 'com.google.code.gson:gson:2.8.6'

0 голосов
/ 13 июля 2020

Вы можете передать ArrayList<E> таким же образом, если тип E равен Serializable.

т.е.: Реализуйте Serializable в E

Вы бы позвонили putExtra (String name, Serializable value) из Intent для хранения и getSerializableExtra (String name) для извлечения.

Например,

ArrayList<String> myList = new ArrayList<String>();
intent.putExtra("mylist", myList);

Получить в другом действии:

ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("mylist");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...