2010-07-22 78 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())中設置適配器,但這個小技巧在我的情況下確實有效。