我在调用setSelection
之前在Spinner上调用setOnItemSelectedListener
,为什么onItemSelected
方法会被触发?
public class MyActivity implements AdapterView.OnItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.options, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = (Spinner) findViewById(R.id.MySpinner);
spinner.setAdapter(adapter);
// spinner.setOnItemSelectedListener(null); // tried this also
spinner.setSelection(1);
spinner.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d(DEBUG_TAG, "onItemSelected() firing");
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
}
答案 0 :(得分:0)
可能setOnItemSelectedListener
只是将OnItemSelectedListener
(立即)引用,而setSelection
与&#34;相关&#34; View
(有一个州state_selected
)因此在布局完成绘图时会调用它 - 您的选择将被&#34;发布&#34;。 setSelection
像spinner.post(spinner.setSelectionImmediatelly(position))
View
忙于自己的绘图,因此选择将在View
完成自己的方法后显示Listener
View
将自己绘制(在onCreate
之后)并检查它是否应该重绘自己的绘图 - 新选择正在等待所以它将被绘制然后检查是否有任何Listener
。是的,它设置在onCreate
如果你想&#34;修复&#34;这可以在Listener
方法中设置onResume
或使用您的微调器的ViewTreeObserver