Делаемая реализация в Kotlin? - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть реализация просмотра списка ( в HomeActivity.kt ) пользовательских объектов, отображающих определенные c данные пользователей из ArrayList. Мой setOnItemClickListener работает нормально и переносит пользователя на другое действие ( DetailsActivity.kt ), когда выбран какой-либо элемент. Я хочу передать всю информацию о выбранном пользователе, чтобы отобразить ее в DetailsActicity.kt . Как мне реализовать Parcelable в KOTLIN для этого?

Вот мой HomeActivity.kt

val sectors = arrayOf("Sector", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
        val sectorOption = findViewById<View>(R.id.sectorOption) as Spinner

        if(sectorOption != null){
            val sectorAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, sectors)
            sectorOption.adapter = sectorAdapter
            sectorOption.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
                override fun onItemSelected(
                    parent: AdapterView<*>?,
                    view: View?,
                    position: Int,
                    id: Long
                ) {
                    if (parent != null) {
                        sect = parent.getItemAtPosition(position).toString()
                        db.collection("Users").whereEqualTo("sector", sect)
                            .get()
                            .addOnCompleteListener { task ->
                                if(task.isSuccessful){
                                    UserList.clear()
                                    for(document in task.result!!){
                                        Log.d(ContentValues.TAG, "test" + document.id + "=>" + document.data)

                                        UserList.add(User(document.get("Name").toString(), document.get("EmailID").toString(), document.get("sector").toString()))
                                    }
                                    UserDataAdapter = UserDataAdapter(ArrayList(UserList), applicationContext)
                                    listview.setAdapter(UserDataAdapter)
                                }
                            }
                    }
                }
                override fun onNothingSelected(parent: AdapterView<*>?) {

                }
            }
        }        

        listview.setOnItemClickListener{parent, view, position, id ->
            val element = UserDataAdapter?.getItem(position)
            val intent = Intent(this, OrderActivity::class.java)
            startActivity(intent)
        }

И это мой User.kt класс данных

data class User(val Name: String = "",
                 val sector: String = "",
                 val Address: String = "",
                 val Mobile: String = "",
                 val EmailID: String = ""
)

1 Ответ

0 голосов
/ 24 февраля 2020

Один из подходов заключается в использовании @Parcelable аннотации из Android Kotlin плагина расширений .

Это экономит ваше написание стандартного кода и предоставляет возможность настраивать сериализацию / десериализацию посредством реализации Parceler экземпляров.

Также у вас все еще есть возможность реализовать интерфейс Parcelable обычным способом с помощью Kotlin: https://developer.android.com/reference/kotlin/android/os/Parcelable

...