【问题标题】:Spinner select the same item twice微调器选择相同的项目两次
【发布时间】:2015-01-15 12:29:45
【问题描述】:

我创建了一个由标志填充的微调器,并为每个标志创建了一个国家代码:

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

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

  • 用例:

以英国国旗和代码为例,我通过微调器选择英国国旗,触发我的事件 OnItemSelectedListner 并将 +44 国家代码设置为我的编辑文本。

然后我错误地删除了它,所以我要回到我的微调器上我在我的英国国旗上单击了一个新时间但没有任何反应,我的事件 OnItemSelectedListner 是没有触发,而我点击了我的标志。

此时,如果我单击列表中的另一个单位,将显示其代码,我可以返回 UK flag 单击它以显示代码,这一次它可以工作。

我试图弄清楚为什么我无法触发此事件: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。因为这就是为什么我不能重新选择两次相同的项目的原因,它已经被选中了。

【问题讨论】:

  • 您能否展示用于重新打开或重新初始化微调器的代码?如果第二次没有 onItemSelectedListener 附加到微调器,那么这可能是您的问题的根源。
  • @FrankD。我没有任何代码来重新初始化我的微调器。我只想有一个事件 setOnItemClickListener 而不是 setOnItemSelectedListener。因为这里是我不能重新选择同一个项目的原因,它已经被选中了。

标签: android spinner onitemselectedlistener


【解决方案1】:

我发现的一种解决方法是在微调器中添加一个“占位符”,例如列表中的第一项是“选择国家/地区”。然后添加

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);
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多