在RecyclerView中获取微调器选定的项目

时间:2017-11-15 08:30:08

标签: android android-recyclerview android-spinner

我在Spinner内添加了RecyclerView,当我试图获取微调器选择的项目数据时,它获取另一个/错误的位置数据,任何一个建议我从{获得正确的选定项目和位置{1}} Spinner

这是我的代码

onItemSelected

2 个答案:

答案 0 :(得分:3)

我认为你必须尝试这个

  showSpinnerList.setOnItemSelectedListener(new 
         AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int 
               position, long id) {
                // On selecting a spinner item

                String item = parent.getItemAtPosition(position).toString();

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // todo for nothing selected
            }
        });

答案 1 :(得分:0)

检查一下,可能会有所帮助,可能会解决您的问题。如果这不能解决你的问题,至少你摆脱了Lint错误。 Lint error “Do not treat position as fixed; only use immediately…”。因此,无论您在使用final int position**的任何地方,都要将其更改为getAdapterPosition();

  

RecyclerView.Adapter.onBindViewHolder()的文档   规定:

     
    

请注意,与ListView不同,RecyclerView不会调用此方法     再次,如果项目的位置在数据集中发生变化,除非     项目本身无效或无法确定新职位。     因此,您应该只使用position参数     获取此方法中的相关数据项,不应保留     它的副本。如果您稍后需要某个项目的位置(例如,在     点击监听器),使用将更新的getAdapterPosition()     适配器位置

         

因此,从技术上讲,项目可能会重新安排,而绑定则不会     必要的,因为项目尚未失效。 position     收到的变量仅适用于绑定函数的范围和     并不总是指向数据集中的正确位置。这就是为什么     每次更新时都必须调用函数getAdapterPosition()     需要立场。

         

恕我直言,mLastPosition = holder.getAdapterPosition();仍在     可能是错的。因为项目可能会被重新安排,mLastPosition     仍然指向旧位置。

         

关于为什么lint是沉默的,也许Lint规则并不那么彻底。它的     仅检查是否正在复制position参数。