ArrayAdapter с вращателем в kotlin - ни одна из следующих функций не может быть вызвана с предоставленными аргументами - PullRequest
3 голосов
/ 18 марта 2019

У меня есть счетчик, в котором я хочу отобразить список строк (например, языков); Я пробовал много способов, но ни один не работал. И теперь я застрял с этой единственной ошибкой. Речь идет о ArrayAdapted: «Ни одна из следующих функций не может быть вызвана с предоставленными аргументами». Я попробовал трюк, упомянутый в этом посте Ссылка на похожий вопрос .

val arrayAdapter = ArrayAdapter(this,android.R.layout.simple_spinner_item, statuts.toList())

и это:

val arrayAdapter = ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, statuts.toList())

и это:

val arrayAdapter = ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, statuts)

Но это не работает. Пожалуйста, помогите мне, я новичок в Kotlin.

    class FirstFragment : Fragment(),AdapterView.OnItemSelectedListener {

    // attributes
    var statuts = arrayOf("English", "French", "Spanish")
    var spinner:Spinner? = null
    var textView_msg:TextView? = null

    // methods    
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        textView_msg = msg
        spinner = this.statuts_sp
        spinner!!.setOnItemSelectedListener(this)
        val arrayAdapter = ArrayAdapter(this,android.R.layout.simple_spinner_item, statuts.toList())
        // Set layout to use when the list of choices appear
        arrayAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        // Set Adapter to Spinner
        statuts_sp!!.adapter = aa
        // Inflate the layout for this fragment
        return inflater!!.inflate(R.layout.fragment_first, container, false)
    }
    /*************************************************************************************/
    override fun onItemSelected(arg0: AdapterView<*>, arg1: View, position: Int, id: Long) {
    textView_msg!!.text = "Selected : "+statuts[position]
         }
    /*************************************************************************************/
    override fun onNothingSelected(arg0: AdapterView<*>) {}
}

Ответы [ 4 ]

3 голосов
/ 19 марта 2019

попробуйте это:

в вашей основной деятельности:

    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>
2 голосов
/ 18 марта 2019

При использовании Array Adapter во фрагменте первым параметром должен быть текущий контекст класса, полученный из действия.

Заменить эту строку

val aa = ArrayAdapter(this,android.R.layout.simple_spinner_item, statuts.toList())

Кому:

var list = ArrayList<String>()
val aa = ArrayAdapter(activity,android.R.layout.simple_spinner_item,list)
1 голос
/ 18 марта 2019

Проблема: ArrayAdapter (Контекстный контекст, Int ресурс, Объекты списка) получает Context в качестве первого параметра, но вы передаете this как Fragment (не подкласс Context) в качестве первого параметра.

Решение: Измените код с

val aa = ArrayAdapter(this,android.R.layout.simple_spinner_item, statuts.toList())

до

val aa = ArrayAdapter<String>(requireActivity(), R.layout.simple_spinner_item, statuts.toList())
1 голос
/ 18 марта 2019

Отметьте это,

 val countryAdapter = ArrayAdapter<Country>(
            this, R.layout.dialog_row_place, countryArrayList
        )
        countryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        mListView.setAdapter(countryAdapter)

Layout dialog_row_place - это пользовательский XML-файл для элемента списка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...