微调器两次选择相同的项目

时间:2015-01-15 12:29:45

标签: android spinner onitemselectedlistener

我创建了一个由标志填充的微调器和每个标志的国家/地区代码编号:

enter image description here

但是我遇到了一个问题。当我删除editText上的国家/地区代码时,我希望能够返回到微调器并再次单击该标记并显示我刚刚删除的正确国家/地区代码。

但目前我无法再次触发 OnItemSelectedListener 事件。

  • 使用案例:

例如,在英国国旗和代码中,我通过微调器选择英国国旗,我的事件 OnItemSelectedListner 被触发,+ 44国家代码被设置为我的editText。

然后我把它删除了,所以我回到我的微调器上我点击我的英国国旗的新时间但没有任何反应,我的事件 OnItemSelectedListner 当我点击我的旗帜时,没有触发。

此时如果我点击列表中的其他单位,其代码将会显示,我可以返回英国国旗点击它以显示代码,这次它可以正常工作。

我试图弄清楚为什么我无法触发此事件:第二次 OnItemSelectedListner 。就像我的项目已被选中一样,此时不可能发生任何事件。

我的代码:

new AsyncPhoneInitTask(currentActivity.this).execute();// fetch data to fill spinner
countrySpinner = (Spinner) findViewById(R.id.spinner);
countrySpinner.setOnItemSelectedListener(onItemSelectedListener);
countryAdapter = new CountryAdapter(currentActivity.this);
countrySpinner.setAdapter(countryAdapter);

// I want to trigger this event a second time
protected AdapterView.OnItemSelectedListener onItemSelectedListener = new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            Country c = (Country) countrySpinner.getItemAtPosition(position);

            // My code
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    };

有没有办法解决我的问题?

我想要一个事件 setOnItemClickListener 而不是setOnItemSelectedListener。因为这就是我无法重新选择同一项目的原因,所以它已被选中。

1 个答案:

答案 0 :(得分:0)

我找到的一个解决方法是在微调器中有一个“占位符”,就像列表中的第一个项目是“选择国家/地区”一样。然后添加

countrySpinner.setSelection(0);

onItemSelected()。这会强制微调器交换选择的项目,导致onItemSelected()发生两次,一次是用户选择的,一次是“选择国家/地区”选项。由于此变通方法还会再次触发onItemSelected,因此您需要在开始时进行检查以避免无限循环。

int positionOfPlaceholder = 0;

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

    //Check if the first element is choosen
    if(i == positionOfPlaceholder){
        return;
    }
    Country c = (Country) countrySpinner.getItemAtPosition(position);

    //Code

    countrySpinner.setSelection(positionOfPlaceholder);
}

问题在于,选择的值永远不会显示在微调器中,因为它看起来像你也想要......