微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

微调框已选择项目选择事件

如何解决微调框已选择项目选择事件

场景: 我正在使用Spinner进行日期范围选择,效果很好。问题是,有一个选项“自定义范围”必须打开自定义日期范围选择器。尽管它第一次运行正常。

enter image description here

enter image description here

问题是: 用户再次单击它时,它不会调用onItemSelected(parent: AdapterView<*>?,view: View?,position: Int,id: Long)(这是Spinner的功能)。但是从用户的角度来看,这是一个错误

有什么办法,我们可以在Spinner的一个已选择项目上获得任何选择事件吗?

解决方法

要在Spinner中已选择的项目上调用事件,您可以通过以下方式进行操作:

  1. 通过扩展AppCompatSpinner创建自己的Spinner类:
import android.content.Context
import android.util.AttributeSet
import android.util.Log

class MySpinner(context: Context,attrs: AttributeSet?) : androidx.appcompat.widget.AppCompatSpinner(
    context,attrs
)
{
    var listener: OnItemSelectedListener? = null

    override fun setSelection(position: Int)
    {
        super.setSelection(position)
        if (position == selectedItemPosition)
        {
            listener!!.onItemSelected(this,selectedView,position,selectedItemId)
        }
    }

    override fun setOnItemSelectedListener(listener: OnItemSelectedListener?)
    {
        this.listener = listener
    }
}
  1. 在您的布局中使用它:
<com.yourcompany.kotlintest.MySpinner
    android:id="@+id/spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
  1. 创建布局时,请执行以下操作:
class MainActivity : AppCompatActivity()
{
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val spinner = findViewById<MySpinner>(R.id.spinner)

        spinner.adapter = ArrayAdapter(
            this,android.R.layout.simple_spinner_dropdown_item,arrayListOf("One","Two","Three")
        )

        spinner.onItemSelectedListener = object :
                AdapterView.OnItemSelectedListener
        {
            override fun onItemSelected(
                parent: AdapterView<*>,view: View,position: Int,id: Long
            )
            {
                Log.d("MyTag","Click item at pos $position")
            }

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

现在,当您重新选择相同项目时,将执行

,

您使用过

function handleGenerateFibonacci(event) {
    for (const n of generator(limit)) {
      arr.push(n)
    }
    setArr([...arr])
    event.preventDefault();
  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。