首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >已选择的项选择事件

已选择的项选择事件
EN

Stack Overflow用户
提问于 2020-10-27 08:29:06
回答 2查看 416关注 0票数 1

场景:我正在使用Spinner来选择日期范围,它运行得很好。问题是,有一个选项“自定义范围”,我必须打开一个自定义日期范围选择器。虽然它第一次运转良好。

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

有没有办法,我们可以得到任何选择事件的一个已经选定的项目旋转器?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-27 09:01:19

要调用Spinner中已经选定的项上的事件,可以这样做:

通过扩展AppCompatSpinner创建您自己的

代码语言:javascript
运行
复制
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. 在布局中使用它:

代码语言:javascript
运行
复制
<com.yourcompany.kotlintest.MySpinner
    android:id="@+id/spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

  1. 在创建布局时执行以下操作:

代码语言:javascript
运行
复制
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")
            }
        }
    }
}

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

票数 3
EN

Stack Overflow用户

发布于 2020-10-27 08:44:54

你用过

代码语言:javascript
运行
复制
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        // your code here with selected **item position**
    }

    @Override
    public void onNothingSelected(AdapterView<?> parentView) {
        // your code here
    }

});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64550613

复制
相关文章

相似问题

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