【发布时间】:2011-08-08 21:44:04
【问题描述】:
在我的 Android 应用程序中,我想在从微调器中做出特定选择时播放声音,但我希望它在用户实际做出正确选择时(或之后)播放。我的问题是,虽然声音在他们做出正确选择时确实会播放,但只要该选择保持选中状态,它也会在每次应用程序启动时播放,它应该只在选择时播放。这是我现在拥有的代码:
fitnessSpinner = (Spinner) findViewById(R.id.fitness_spinner);
ArrayAdapter adapter4 = ArrayAdapter.createFromResource(
this, R.array.fitness_array, android.R.layout.simple_spinner_item);
adapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
fitnessSpinner.setAdapter(adapter4);
fitnessSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long i) {
Log.d("test", "p: " + position + " " + i);
if(position == 0) {
//First Entry
MediaPlayer mp = MediaPlayer.create(mContext, R.raw.bowchica);
mp.start();
} if(position == 4) {
MediaPlayer mp = MediaPlayer.create(mContext, R.raw.debbie2);
mp.start();
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
如何让应用程序启动时停止播放声音?如果存在这种情况,我是否应该将整个 FitnessSpinner.setOnItemSelectedListener... 包装在某种类型的更改选择中?
【问题讨论】:
-
您可以在 onClickListener 中添加 playOnce 标志,以便进入微调器,然后您可以在播放时将该标志设置为 false,在单击微调器时将该标志设置为 true。
-
我已经删除了我的答案 - 你是对的,即使 Spinner 扩展了 AdapterView,也不可能在 Spinner 上使用 setOnItemClickListener。不过我现在记得的东西 - onItemSelected 总是在 Spinner 首次填充时被调用(即使没有用户交互)。我认为这是 Android Spinner 源代码中的错误。这并不总是一个问题,但在播放声音的情况下显然是。不知道你会如何解决它。如果我想出什么我会告诉你的。抱歉,我无法提供更多帮助。
-
是否有任何其他对象会表现得像微调器/下拉菜单但会有 OnItemClcickListener?
-
切换到单选按钮/单选组怎么样?那会有一个只有在点击时才会触发的事件吗?另外,列表视图可以以某种方式工作吗?