Я завершил внедрение этого нового графика навигации Jetpack Android в проект.У меня есть ListView
, у которого есть подробный вид, определенный на графике навигации.
Переходы в и из вида для просмотра с помощью этого графика навигации работают отлично, однако я застрял сейчас, пытаясь передатьобъект данных от ListView
(представление A, состоящее из Winter
объектов) до подробного представления (представление B).До использования Jetpack это было довольно просто с намерениями и startActivity()
Зимним объектом:
class Winter(sportName:String, sportType: SportType, sportEquipment:ArrayList<Equipment> ) {
var sportName = ""
var sportType = WinterModel.SportType.board
var sportEquipment = arrayListOf<Equipment>()
enum class SportType(val type: String){
board("Board"),
ski("Ski"),
engine("Engine")
}
init {
this.sportName = sportName
this.sportType = sportType
this.sportEquipment = sportEquipment
}
}
Я хотел бы иметь возможность сделать что-то вроде:
val tappedSport = winterSport[position]
val bundle = Bundle()
bundle.putString(SPORT, tappedSport)
Navigation.findNavController(view!!).navigate(R.id.winterSportDetails,bundle)
Очевидно, что это не сработает, потому что winterSport [position] не является строкой ...
Как я могу передать подключенный объект Winter в View B с помощью навигации Jetpack?
Редактировать: Вот как я бы сделал это с намерениями.
Просмотр A (Отправка)
listView.setOnItemClickListener { _, _, position, _ ->
val tappedSport = winterSport[position]
val detailIntent = DetailActivity.newIntent(context, tappedSport)
startActivity(detailIntent)
}
Просмотр B(Получение)
companion object {
const val SPORT_NAME = "SPORT_NAME"
const val SPORT_TYPE = "SPORT_TYPE"
const val SPORT_EQUIPMENT = "SPORT_EQUIPMENT"
fun newIntent(context: Context, sport: WinterModel): Intent {
val detailIntent = Intent(context, DetailActivity::class.java)
detailIntent.putExtra(SPORT_NAME, sport.sportName)
detailIntent.putExtra(SPORT_TYPE, sport.sportType.type)
detailIntent.putExtra(SPORT_EQUIPMENT, sport.sportEquipment.gear)
return detailIntent
}
}
//.. Then just access the info in onViewCreated