Android Spinner 设置setOnItemSelectedListener时,竟会默认触发一次事件!
时间: 2024-03-23 08:37:04 浏览: 15
是的,Android Spinner 在设置 setOnItemSelectedListener 时会默认触发一次事件。这是因为 Spinner 在初始化时会自动选中第一个选项,从而触发一次事件。如果需要避免这种情况,可以在设置完监听器后手动调用一次 onItemSelected 方法来处理选中事件。例如:
```
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// 处理选中事件
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// 处理未选中事件
}
});
// 手动调用一次 onItemSelected 方法,避免默认触发一次事件
spinner.post(new Runnable() {
@Override
public void run() {
spinner.setSelection(0, false);
spinner.performItemClick(spinner.getSelectedView(), 0, 0);
}
});
```
相关问题
Android中 设置Spinner默认选中值
要设置Spinner的默认选中值,可以使用以下代码:
假设你有一个名为"spinner"的Spinner,并且你想要将它的默认选中值设置为第二项:
```java
Spinner spinner = findViewById(R.id.spinner);
// 设置下拉列表的内容
String[] items = {"第一项", "第二项", "第三项"};
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items);
spinner.setAdapter(adapter);
// 设置默认选中项
spinner.setSelection(1);
```
在这个例子中,我们首先创建了一个包含三个选项的字符串数组,并将其设置为Spinner的下拉列表内容。然后,我们使用`setSelection()`方法将Spinner的默认选中项设置为第二项(即索引为1的项)。
注意:默认选中项的索引从0开始,因此第二项的索引为1。
Android spinner设置显示文字
在 Android 中,Spinner 是一个下拉菜单控件,可以在其中选择一个选项。如果我们希望 Spinner 显示的是选项的文字,而不是默认的 toString() 方法返回的字符串,可以通过自定义适配器的方式来实现。
首先,我们需要自定义一个适配器,继承 ArrayAdapter,重写 getView() 方法,在其中设置显示的文字。例如,以下代码创建了一个自定义适配器,将 Spinner 中的选项显示为选项的名称:
```
public class MySpinnerAdapter extends ArrayAdapter<Item> {
private List<Item> itemList;
public MySpinnerAdapter(Context context, int resource, List<Item> itemList) {
super(context, resource, itemList);
this.itemList = itemList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) super.getView(position, convertView, parent);
textView.setText(itemList.get(position).getName());
return textView;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) super.getDropDownView(position, convertView, parent);
textView.setText(itemList.get(position).getName());
return textView;
}
}
```
在这个适配器中,我们重写了 getView() 和 getDropDownView() 方法。getView() 方法用于设置 Spinner 的默认显示文字,getDropDownView() 方法用于设置下拉列表中每个选项的显示文字。在这两个方法中,我们通过 `textView.setText(itemList.get(position).getName())` 来设置显示的文字,其中 getName() 是我们自定义的 Item 类中的一个方法,用于获取选项的名称。
接下来,我们将自定义的适配器设置为 Spinner 的适配器,即可实现显示选项名称的效果。例如,以下代码创建了一个包含三个 Item 对象的列表,并将其作为适配器设置给 Spinner:
```
List<Item> itemList = new ArrayList<>();
itemList.add(new Item("item1"));
itemList.add(new Item("item2"));
itemList.add(new Item("item3"));
MySpinnerAdapter adapter = new MySpinnerAdapter(this, android.R.layout.simple_spinner_item, itemList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = findViewById(R.id.spinner);
spinner.setAdapter(adapter);
```
在这段代码中,我们创建了一个包含三个 Item 对象的列表,然后将其作为适配器设置给 Spinner。通过 `adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)` 方法,我们设置了下拉列表的布局,即系统自带的简单布局。最后,通过 `spinner.setAdapter(adapter)` 方法将适配器设置为 Spinner 的适配器,即可实现显示选项名称的效果。