связать OnItemSelectedListener связать с setOnClickListener. Kotlin

всем привет! можете пожалуйста подсказать как в Kotlin . У меня в Main Acitivy спиннер с 2-мя вариантами (Grid список , Linear список) и 1 кнопка перейти.

  1. Если я выберу в спиннере Linear а потом нажму на кнопку (button) "Go" он меня перебросит на Активити с Reycler View с Linearlayout manager.

  2. а если я выберу в спиннере с названием "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 шт):

Автор решения: blind.falcon

Я немного подправил ваш код, чтобы он соответствовал вашим ожиданиям.

В нём мы назначаем создаём переменную 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))
        }
}
   
→ Ссылка