不能将带有Spinner的onItemSelectListener()与One Item一起使用

时间:2011-10-01 13:42:23

标签: android focus spinner

所以我有一个微调器(spinner2 here),它通过一个来自SQLite表的ArrayAdapter填充。选择我想要的项目

  • 已从数据库中删除
  • 从微调器中删除

下面的代码实际上有效。除了微调器只有一个项目。当发生这种情况时 似乎onItemSelected根本没有被调用。

我得到以下LogCat

10-01 22:30:55.895: WARN/InputManagerService(1143): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@45a06028

哦,当两个项目填充微调器时,spinner.getcount()显示两个项目,所以系统认为微调器是空的或类似的东西并不是一些奇怪的情况。

这是代码:

public class SpinnerItemSelectListener implements OnItemSelectedListener {

        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
            if(parent == spinner2){
                if(autoselected){
                    autoselected=false;
                }
                else{
                    //uniqvalarray is the arraymade from pulling data from SQLite and populaitng array adapter
                    Integer i = uniquevalarray.get(pos);
                    deleteRow(i);//deletes the row from the database and repopulates the above array.
                    autoselected=true;//just a boolean to stop autoslecting in onCreate()
                    //makeAlert(i);initially wanted to make alert box.
                    loadSpinner2();//reloads the spinner with new data


                }

            }



        }

        public void onNothingSelected(AdapterView parent) {
            //TODO
        }
    }

1 个答案:

答案 0 :(得分:0)

微调器以这种方式运行:仅在更改所选项目时触发。如果你不改变那个元素,导致它唯一存在,它就不会改变。

我认为您必须使用的解决方案是使用微调器旁边的按钮来抛出删除功能。

您必须认为Spinner不具有唯一元素,因此通常只有在更改所选元素时才会更改。那么自然的解决方案就是那样。