связать OnItemSelectedListener связать с setOnClickListener. Kotlin
всем привет! можете пожалуйста подсказать как в Kotlin . У меня в Main Acitivy спиннер с 2-мя вариантами (Grid список , Linear список) и 1 кнопка перейти.
Если я выберу в спиннере Linear а потом нажму на кнопку (button) "Go" он меня перебросит на Активити с Reycler View с Linearlayout manager.
а если я выберу в спиннере с названием "Grid" , и нажму на кнопку "Go" (button), то он меня перебросит на активити с RecyclerView который будет показывать Grid Layout Manager.
То есть суть моего вопроса, когда я выберу одно из предложений в спиннере и нажму на кнопку , чтоб он меня пребросил на активити которое я выбрал в Spinere.
class MainActivity : AppCompatActivity(), AdapterView.OnItemSelectedListener {
private var Go: Button?=null
private var spinner: Spinner? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
spinner=findViewById(R.id.spinner)
Go = findViewById(R.id.Go)
SetupAdaperts()
}
private fun SetupAdaperts(){
val adapter2r=spinnerAdapter(applicationContext,R.id.tvtext, Turdata())
spinner?.adapter=adapter2r
}
private fun Turdata(): ArrayList<cusstomDataClass> {
val data = arrayListOf<cusstomDataClass>()
data.add(cusstomDataClass())
data.add(cusstomDataClass("Grid"))
data.add(cusstomDataClass("Linear"))
return data
}
private fun Listener() {
spinner?.onItemSelectedListener = this
}
override fun onNothingSelected(p0: AdapterView<*>?) {
Log.d("fdsfsfs","asfasfa")
}
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
Log.d("dsfdsfs","sdfsfsdsf")
}
}
Ответы (1 шт):
Я немного подправил ваш код, чтобы он соответствовал вашим ожиданиям.
В нём мы назначаем создаём переменную currentPosition, для хранения выбранной в спинере позиции.
Так же мы назначаем слушателя(Litener) на спинер в методе setSpinnerListener() где при выборе элемента спинера сохраняем текущую позицию в переменную currentPosition.
Так же мы назначаем слушателя на кнопку go в методе setButtonListener()
Чтобы всё это работало мы вызываем методы setButtonListener(), setSpinnerListener() в методе активити onCreate() после того как определили кнопку и спинер
Так же примите к сведению, что принято все названия переменных и методов начинать с маленькой буквы, а название классов и интерфейсов с большой.
class MainActivity : AppCompatActivity(), AdapterView.OnItemSelectedListener {
private var go: Button?=null
private var spinner: Spinner? = null
private var currentPosition: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
spinner=findViewById(R.id.spinner)
go = findViewById(R.id.Go)
setupAdaperts()
setButtonListener()
setSpinnerListener()
}
private fun setupAdaperts(){
val adapter2r=spinnerAdapter(applicationContext,R.id.tvtext, Turdata())
spinner?.adapter=adapter2r
}
private fun Turdata(): ArrayList<cusstomDataClass> {
val data = arrayListOf<cusstomDataClass>()
data.add(cusstomDataClass())
data.add(cusstomDataClass("Grid"))
data.add(cusstomDataClass("Linear"))
return data
}
private fun setSpinnerListener() {
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {
}
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) { currentPosition = position }
}
}
private fun setButtonListener() {
go.setOnClickListener { startActivity() }
}
private fun startActivity() {
when (currentPosition) {
0 -> startActivity(Intent(this, YourFirstActivity::class.java))
1 -> startActivity(Intent(this, YourSecondActivity::class.java))
}
}