我有一个意图启动活动,页面上有许多微调器。我只是按照this指南设置了我的微调器的ItemSelected侦听器。问题是,每个Spinner中的第一项基本上都是“请选择”,只是因为它不是一个空白框:所以我的ItemSelected监听器检测到Please select在spinner中的事实并且似乎假设它被选中而不是被加载默认情况下。理想情况下,我希望侦听器只检测何时进行实际选择。忽略默认选择的最佳方法是什么?
以下是相关代码:
ageSpinner = (Spinner) findViewById(R.id.ageSpinner);
ageAdapter = ArrayAdapter.createFromResource
(this, R.array.ageArray, android.R.layout.simple_spinner_item);
ageAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
ageSpinner.setAdapter(ageAdapter);
ageSpinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
Toast.makeText(parent.getContext(), "The planet is " +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}
答案 0 :(得分:1)
将布尔值设置为false,在onItemSelected中检查它,如果为false,则将其设置为true,不执行任何其他操作。下次,这是正常的,就像你平常那样。
答案 1 :(得分:1)
这里有很多可行的方法。例如,您可以使用反射覆盖Spinner
的正常行为,或者只需切换到Button
模仿Spinner
,点击它会弹出AlertDialog
但是,其他解决方案可以更容易实现。巴拉克已经命名了一个,而另一种方法是简单地检查Spinner
中的选定位置,假设“请选择”将始终是第一个项目(因此,位置0
)并且您“我没有对这些物品进行任何排序。
我相信你会找到适合你的问题的可能性之一,但也许你还可以详细说明为什么在初始选择时会引发问题onItemSelected(...)
?
答案 2 :(得分:1)
问题是选择是在第一个布局阶段完成的。因此,第一次计算布局时,Spinner
会引发onItemSelected
。它很烦人,但它的工作方式。您可以尝试几种不同的东西,但鉴于您已经拥有请选择某些项目,您可以做的最好是在所选项目为0时忽略该事件。
答案 3 :(得分:0)
OP解决方案。
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
if (pos != 0) {
//this if makes sure it ignores 0, which is
//Please Select in the drop down
Toast.makeText(parent.getContext(), parent.getTag().toString() +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
}
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}