我的 Activity 为微调器实现了 OnItemSelected 侦听器。它有一个有趣的问题,即当活动显示时触发 onItemSelected 回调。所以我使用了一个flag hack来解决它(我讨厌它,但此时我只想让应用程序工作)。
奇怪的是,即使回调在活动开始时被调用,我的实际触摸选择也不起作用。我可以触摸列表,打开它,查看数组适配器中的字符串,甚至触摸它以使其关闭 - 但回调永远不会被调用。
My code:
public class MyActivity extends Activity implements OnItemSelectedListener {
…
private ArrayList<String> mMyTypes = null;
private ArrayAdapter<String> mMyAdapter = null;
private Spinner mMyTypeSpinner = null;
// hack for spinner
boolean isFirstRunWithSpinner = true;
在 onCreate() 中:
mMyTypeSpinner = (Spinner) findViewById(R.id.my_activity_spinner);
mMyTypes = new ArrayList<String>();
mMyTypes.add("Test string");
mMyAdapter = new ArrayAdapter<String>(this, R.layout.custom_spinner_style, mMyTypes);
mMyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mMyTypeSpinner.setAdapter(mMyAdapter);
// spinner listener
mMyTypeSpinner.setOnItemSelectedListener(this);
回调:
@Override
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
Toast
.makeText(ConfirmEditActivity.this, "Selected", Toast.LENGTH_LONG)
.show();
if( isFirstRunWithSpinner ) { isFirstRunWithSpinner = false; return; }
…
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
Toast
.makeText(ConfirmEditActivity.this, "Nothing", Toast.LENGTH_LONG)
.show();
}
显示活动时,会立即显示 toast,但是当我在微调器中选择项目时,微调器会关闭,并且不会再次显示 toast(更不用说回调中的其余代码无法执行)。
有什么观察吗?
我真的希望这是简单的事情......