首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spinner ()未被调用

Spinner ()未被调用
EN

Stack Overflow用户
提问于 2019-03-21 10:28:23
回答 3查看 903关注 0票数 9

我实现了一个ArrayAdapter来填充我的Spinner视图。Spinner运行良好,但是当我点击旋转器中的一个项目时,android并没有检测到。

我遵守了Android文档中的spinner示例中的所有要求,包括在我的活动中实现AdapterView.OnItemSelectedListener,以及重写它的两个方法OnItemSelectedListeneronNothingSelected,但是,在这些方法中,我的Log语句都没有打印,因此不会被调用。

我还通过choose_user.onItemSelectedListener = this@PlayerDetails将侦听器设置为我的旋转器。

这里是我的活动:

代码语言:javascript
复制
class PlayerDetails : AppCompatActivity(), View.OnClickListener, TextWatcher, AdapterView.OnItemSelectedListener {
    val TAG: String = "PlayerDetails"
    val FirebaseTAG: String = "FirebaseDebug"

    var numOfPlayers: Int = 1
    var currentPlayer: Int = 1

    var name: String = ""
    var age: Int = 0
    var genderId: Int = 0
    var genderResult: String = ""

    val db = FirebaseFirestore.getInstance()
    var users: MutableList<String> = mutableListOf()

    private lateinit var binding: ActivityPlayerDetailsBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val sharedPref = this@PlayerDetails.getPreferences(Context.MODE_PRIVATE)
        val applicationID: String? = sharedPref.getString("applicationID", null)

        binding = DataBindingUtil.setContentView(this, R.layout.activity_player_details)

        if (applicationID != null) {

            db.collection("phones").document(applicationID)
                .collection("users")
                .get()
                .addOnSuccessListener { result ->

                    for (document in result){
                        val name = document.get("name").toString()
                        users.add(name)
                    }
                }

            Log.d(FirebaseTAG, users.toString())
            val spinnerAdaptor = ArrayAdapter<String>(this@PlayerDetails, android.R.layout.simple_spinner_item, users)
            spinnerAdaptor.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            choose_user?.adapter = spinnerAdaptor
            choose_user.onItemSelectedListener = this@PlayerDetails
        }

        val intent = getIntent()
        numOfPlayers = intent.getIntExtra("number_of_players", 1)
        next_details.setOnClickListener(this)
        player_name.addTextChangedListener(this)
        player_age.addTextChangedListener(this)
        gender.setOnCheckedChangeListener(object: RadioGroup.OnCheckedChangeListener {
            override fun onCheckedChanged(radiogroup: RadioGroup, checked: Int) {
                if (fieldsArePopulated()) next_details.visibility = View.VISIBLE
            }
        })

    }

    override fun onItemSelected(parent: AdapterView<*>?, name: View?, position: Int, rowId: Long) {
        val chosenName: String = parent?.getItemAtPosition(position).toString()
        Log.d("ChosenName", chosenName)
        Log.d("adapterclicked", "adapterclicked")

    }

    override fun onNothingSelected(parent: AdapterView<*>?) {
        Log.d("Nothing", "NOTHINGCALLED")
    }

...

知道问题出在哪里吗?

另外,当我在旋转器中选择一个项时,我的旋转器旁边的视图会移动,因此它显然被检测到了,但是onItemSelected()仍然没有被调用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-23 21:32:09

我为users MutableList设置了一个初始值:

代码语言:javascript
复制
var users: MutableList<String> = mutableListOf("Choose User")

现在正在成功地调用onItemSelected()

票数 2
EN

Stack Overflow用户

发布于 2019-03-21 10:59:06

我很确定onItemSelected返回项目在数组中的位置的int值。因此,您必须将其保存为int而不是字符串,然后添加另一个变量,即字符串和arrayintSaved。

编辑

代码语言:javascript
复制
var chosenName = choose_user.onItemSelected("name")
票数 0
EN

Stack Overflow用户

发布于 2019-03-23 07:01:47

尝尝这个

在此之前:

代码语言:javascript
复制
override fun onItemSelected(parent: AdapterView<*>?, name: View?, position: Int, rowId: Long) {
    val chosenName: String = parent?.getItemAtPosition(position).toString()
    Log.d("ChosenName", chosenName)
    Log.d("adapterclicked", "adapterclicked")

}

之后:

代码语言:javascript
复制
override fun onItemSelected(parent: AdapterView<*>?, name: View?, position: Int, rowId: Long) {
    val chosenNameTextView = parent!!.getChildAt(0) as TextView
    Log.e("MainActivity","choose Spin : ${chosenNameTextView.text.toString()}")
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55278353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档