Сначала вы создаете OnClickListener
в onBindViewHolder()
вашего CountryAdapter
holder.name.setOnClickListener {
val intent = Intent(context, YourActivity::class.java)
context!!.startActivity(intent)
}
Вот как вы устанавливаете OnClickListener
для элемента в адаптере. Здесь мы используем намерение для запуска другого действия при щелчке по элементу.
Теперь класс Intent
в приведенном выше решении принимает два параметра. Первый - это Context
, который является текущим действием с какой пользователь взаимодействует. Это используется для передачи текущего фокуса, в котором должно открыться новое действие. Это не должно быть null
. Второй - это класс активности, на который должно переключиться приложение. Activity
открывается в стеке, что означает «Последний пришел - первым ушел».
Затем вы запускаете созданное намерение, используя startActivity(Intent)
. Но, поскольку это не Activity, вам также необходимо передать ему контекст. Но где же контекст?
Здесь: class CountryAdapter(items : List<String>,ctx:Context)
. Видите ли, вы уже объявили его как аргумент, а также передали его из действия как college_list.adapter = CountryAdapter(displayList,this)
. Это this
- контекст, который вы передали адаптеру.
Я сказал, используйте ctx
. Зачем? потому что вы назвали контекст ctx
в своем адаптере, что не имеет значения, потому что это переменная, и вы можете называть ее как хотите. Такой же контекстный механизм необходим в Fragments
.
Также. помните, что в действии вы передаете this
в качестве контекста в качестве параметра, но не нуждаетесь в нем для вызова таких методов, как startActivity()
.
Итак, окончательный результат для вашего адаптера или Fragment's
onClickListener
:
holder.name.setOnClickListener {
val intent = Intent(ctx, YourActivity::class.java)
ctx.startActivity(intent)
}
В случае действия:
//In activity, you don't even need to pass the rootView to access the elemets as in adapter or Fragments.
name.setOnClickListener {
val intent = Intent(this, YourActivity::class.java)
startActivity(intent)
}
Теперь , вам просто нужно разработать новое действие для элемента. Кроме того, с таким большим количеством элементов вы не захотите создавать столько действий. Итак, создайте такое же структурированное действие, передайте ему выбранный элемент и делайте с ним все, что хотите.
Вы можете сделать это, передав выбранный элемент через намерение, используя .putExtra()
.
//It takes two parameters: First one is the key name you want to give to the value passed
//Second one is the actual value you pass
intent.putExtra("SelectedCountry",list[position])
//This will put the selected country with the intent request.
//put it before just startActivity
Теперь откройте его в следующем упражнении как:
//Here, you have to use the data type based extra for the value you've passed.
//As we have passed a string, we're using getStringExtra, same for int getIntExtra()
//It takes the key name as the input, key should exactly match in both the activities
val selectedCountry = intent.getStringExtra("SelectedCountry")
//Now, do whatever you want with this country name in the new activity.
Это очень подробный ответ, надеюсь, вы все это узнаете. Кроме того, со временем ты узнаешь.