2010-07-22 118 views
2

我的活动实现了微调控件的OnItemSelected侦听器。它有一个有趣的问题,即在活动显示时触发onItemSelected回调。所以我用一个旗帜破解解决它(我讨厌它,但在这一点上,我只是想让应用程序工作)。微调不会响应点击...即使onItemSelected被调用?

奇怪的是,即使回调在活动开始时被调用,我的实际触摸选择也不起作用。我可以触摸列表,打开它,查看阵列适配器中的字符串,甚至可以触摸它以使其消失 - 但回调从未被调用。

我的代码:

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(); 
} 

的吐司右图所示显示在活动时,但是当我选择微调器中的项目,微调控制器解散并且不再显示面包(更不用说c中的其余代码allback无法执行)。

是否有观察?

我真的希望这个简单的东西...

+0

当我添加多个项目的项目列表,他们是可点击的,但第一个不是... – 2010-07-23 15:42:42

+1

我目前面临同样的问题?你现在是否找到了解决方案? – KarlKarlsom 2012-02-01 15:34:53

+0

我已经在下面发布了您的问题的答案。 – MrMaffen 2013-02-23 23:56:27

回答

0

你试过setOnItemClickListener()而不是setOnItemSelectedListener()?

+0

java.lang.RuntimeException setOnItemClickListener不能与微调器一起使用。无论如何感谢 – 2010-07-22 21:08:46

+0

嗯......这很奇怪,因为它在Android文档中: http://developer.android.com/reference/android/widget/Spinner.html – 2010-07-22 21:26:13

+0

哇,很奇怪......我会继续玩它,看看我能想出什么。 – 2010-07-22 21:35:38

1

当选择新项目时,微调器将只响应ItemSelected事件。如果只显示一个项目,您显然只能在下拉列表中重新选择这一项目。这是android微调器的正确行为。如果您的列表中有多个项目,并且点击的项目不是当前选定的项目,onItemSelected将被触发。

从Android文档:

公共抽象无效onItemSelected当在该视图中的项已被选择要被调用(适配器视图父,浏览视图,INT位置,长ID)

回调方法。仅当新选择的职位与之前选定的职位不同或者没有选定的职位时,才会调用此回调。

希望我能帮上忙。

0

如果您已经在选择微调的第一个项目,你想通过调用“重新选择”它(火的onItemSelected()回调),您可以重新设置适配器:

mMyTypeSpinner.setAdapter( mMyAdapter);

这似乎是一个无聊的事情(因为你已经在onCreate())中设置适配器,但这个小技巧在我的情况下确实有效。

相关问题