Счетчик не работает в моем фрагменте Kotlin

#android #kotlin #fragment #spinner

#Android #kotlin #фрагмент #счетчик

Вопрос:

Я хочу, чтобы отображался счетчик, чтобы пользователь мог выбирать между двумя типами, и он не работает

   inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
       spinner2?.adapter = ArrayAdapter(activity, R.layout.support_simple_spinner_dropdown_item, types) as SpinnerAdapter
        spinner2?.onItemSelectedListener = object :AdapterView.OnItemSelectedListener{
            override fun onNothingSelected(parent: AdapterView<*>?) {
                println("erreur")
            }

            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                val type = parent?.getItemAtPosition(position).toString()
                println(type)
            }

        }
        return inflater.inflate(R.layout.fragment_add, container, false)
    }
  

Комментарии:

1. если spinner он объявлен в R.layout.fragment_add , вам нужно будет вернуть возвращаемое значение inflate и выполнить findViewById над ним

2. да, счетчик объявлен на fragment_add.xml , как я могу вернуть значение inflate

3. назначьте его a val t = inflater.inflate(R.layout.fragment_add, container, false) , выполните findViewById , а затем верните t или переопределите onViewCreated

4. я понял, что вы имеете в виду, но он не работает даже

5. @GharsaKhouloud, как ты fragment_add.xml выглядишь. потому что мне это нужно для использования

Ответ №1:

Решение состоит в том, чтобы добавить activity?.applicationContext в адаптер, чтобы изменить activityFragment на контекст:

 class Add : Fragment()
{

val types = arrayOf("simple User", "Admin")

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val t=inflater.inflate(R.layout.fragment_add, container, false)
        val spinner = t.findViewById<Spinner>(R.id.spinner2)
       spinner?.adapter = ArrayAdapter(activity?.applicationContext, R.layout.support_simple_spinner_dropdown_item, types) as SpinnerAdapter
        spinner?.onItemSelectedListener = object :AdapterView.OnItemSelectedListener{
            override fun onNothingSelected(parent: AdapterView<*>?) {
                println("erreur")
            }

            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                val type = parent?.getItemAtPosition(position).toString()
                Toast.makeText(activity,type, Toast.LENGTH_LONG).show()
                println(type)
            }

        }
        return t
    }
}
  

Ответ №2:

onViewCreated

 spinner2?.adapter = ArrayAdapter(activity, R.layout.support_simple_spinner_dropdown_item, types) as SpinnerAdapter
        spinner2?.onItemSelectedListener = object :AdapterView.OnItemSelectedListener{
            override fun onNothingSelected(parent: AdapterView<*>?) {
                println("erreur")
            }

            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                val type = parent?.getItemAtPosition(position).toString()
                println(type)
            }

        }
  

Ответ №3:

В вашей основной деятельности попробуйте это:

     import android.content.Intent
    import android.os.Bundle
    import android.support.design.widget.Snackbar
    import android.support.v7.app.AppCompatActivity;
    import android.view.View
    import android.widget.ArrayAdapter
    import android.widget.Toast
    import kotlinx.android.synthetic.main.activity_logged.*
    import kotlinx.android.synthetic.main.content_logged.*
    import kotlinx.android.synthetic.main.content_main.*

    class logged : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_logged)
        setSupportActionBar(toolbar)
        // Create an ArrayAdapter
        val adapter = ArrayAdapter.createFromResource(this,
            R.array.city_list, android.R.layout.simple_spinner_item)
        // Specify the layout to use when the list of choices appears
       adapter.setDropDownViewResource(
        android.R.layout.simple_spinner_dropdown_item)
        // Apply the adapter to the spinner
        spinner.adapter = adapter
        }

    fun getValues(view: View) {
        Toast.makeText(this, "Spinner 1 "   spinner.selectedItem.toString()
                , Toast.LENGTH_LONG).show()
    }

    }
  

Я помещаю список элементов в strings.xml

 <string-array name="city_list">
    <item>Bangkok</item>
    <item>London</item>
    <item>Paris</item>
    <item>Singapore</item>
    <item>New York</item>
    <item>Istanbul</item>
    <item>Dubai</item>
    <item>Kuala Lumpur</item>
    <item>Hong Kong</item>
    <item>Barcelona</item>
</string-array>
  

Комментарии:

1. Он должен быть во фрагменте, а не в активности