我已經與onItemSelected
互爲作用的作品,但API規範如何說一個微調:微調onItemSelected與項目已經選定
此調用回調函數,只有當新選擇的位置是 從先前選定的不同位置或如果沒有 所選項目。
我需要刪除這個限制,我想的是,調用回調函數還,如果用戶選擇相同的元素。 如何做到這一點?我讀了一個關於擴展Spinner類的建議,並將位置設置爲INVALID_POSITION
,但我還沒有理解/能夠做到這一點。 任何人都做過同樣的事情?
我已經與onItemSelected
互爲作用的作品,但API規範如何說一個微調:微調onItemSelected與項目已經選定
此調用回調函數,只有當新選擇的位置是 從先前選定的不同位置或如果沒有 所選項目。
我需要刪除這個限制,我想的是,調用回調函數還,如果用戶選擇相同的元素。 如何做到這一點?我讀了一個關於擴展Spinner類的建議,並將位置設置爲INVALID_POSITION
,但我還沒有理解/能夠做到這一點。 任何人都做過同樣的事情?
您可以通過自定義適配器做到這一點,就像創建你的慾望意見的佈局,然後再上onItemClick自定義適配器誇大該功能你可以通過這個功能的看法。
要區分每個視圖,您必須設置每行的標記。
它可能適用於您的情況。
讓我知道的任何問題,如果你有
我猜你一定在某個變量存儲的值,初始化vairable爲-1。並且在用戶選擇項目微調器時更改該值,如果該值爲-1,則請求用戶重新選擇或想要的任何內容。
@i希望如果用戶選擇相同的元素,也會調用回調。 Android會爲你做這個,因爲這是android的默認行爲。
「Android會爲你做這個,因爲這是android的默認行爲。」這絕對不是默認行爲。默認情況下(奇怪的是),當你點擊一個已經突出顯示的選擇時,就* *觸發事件。 – Carol
爲什麼您再次選擇所選項目。如果您想再次執行該任務,只需提供刷新按鈕即可。
對我的情況我防止它在onCreate方法上被觸發的事件,然後我的微調它被設置在第一個元素上。如果我需要選擇它,我不能有這個限制。 – jedi
這是所說的紡絲器元件,具有定製對話框模式和whitout PROMT:
<Spinner
android:id="@+id/spinner_metatag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/search_adv"
/>
其中缺省值是在位置0推杆數組元素:
<string-array name="search_adv">
<item>@string/search_adv_prompt</item>
<item>@string/search_adv_title</item>
<item>@string/search_adv_desc</item>
<item>@string/search_adv_autore</item>
....
</string-array>
用於陣列字符串元素與默認值:
<string name="search_adv_prompt">Scegli un metatag</string> <!-- Default value-->
<string name="search_adv_title">Titolo</string>
<string name="search_adv_desc">Descrizione</string>
<string name="search_adv_autore">Autore</string>
...
而這裏的代碼,以防止在onCrea上發生的事件teMethod和周圍的工作以允許選擇已經選擇的相同元素:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_adv_main);
spinner = (Spinner) findViewById(R.id.spinner_metatag);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
//prevent onCreate event fire and the loop
if(pos==0)
return;
//HERE YOUR CODE
//at the end move to the default element the spinner
spinner.setSelection(0);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {}
});
}
希望有所幫助。這個想法來自第二個解決方案TreKing's answer
使用OnItemClickListener而不是itemSelectedListener.That將適用於每次點擊,無論它是相同還是不同。
這根本不起作用。在Spinner上設置OnItemClickListener會引發異常! –
你能告訴我哪個例外..? – Athul
http://developer.android.com/reference/android/widget/Spinner.html#setOnItemClickListener(android.widget.AdapterView.OnItemClickListener) 它是RuntimeException。 –
我還需要解決這個問題。我想要做的是有一個微調,具有自定義範圍選項的日期範圍。該行會是這個樣子:
4月10日 - 5月10
3月10日至四月10日
二月10日至3月10日
自定義範圍
的問題是,如果用戶選擇了一個自定義然後想要更改自定義範圍,則必須選擇不同的範圍,然後再次選擇自定義範圍選項。我希望用戶能夠再次選擇「自定義範圍」,以便自定義範圍對話框可以再次顯示。
我分類了Spinner並創建了我自己的偵聽器。代碼切換選擇,但是立即切換它,以便不選擇任何內容。在我的聽衆中,我忽略了小於零的任何位置。
微調器只顯示最後選擇的項目。我創建了自己的自定義適配器,並指定要爲每個視圖顯示的內容,但這不應該是必需的。以下是我如何分類Spinner。
package com.example.widget;
import android.content.Context;
import android.widget.Spinner;
public class DateRangeSpinner extends Spinner {
private ItemSelectionListener listener;
public DateRangeSpinner(Context context) {
super(context);
}
/**
* This listener will be fired every time an item is selected,
* regardless of whether it has already been selected or not.
*
* @param l
*/
public void setOnItemSelectedListener(ItemSelectionListener l) {
listener = l;
}
public void removeOnItemSelectedListener() {
listener = null;
}
@Override
public void setSelection(int position) {
setSelection(position, true);
}
@Override
public void setSelection(int position, boolean animate) {
if (listener != null) {
listener.onItemSelected(position);
}
super.setSelection(position, animate);
super.setSelection(-1, animate);
}
public interface ItemSelectionListener {
public void onItemSelected(int position);
}
}
我希望這有助於!
希望我可以upvote這個問題1000倍。我希望有一個體面的答案。一直在尋找幾個小時試圖繞過這個愚蠢的限制。 – aaronsnoswell
http://stackoverflow.com/a/11323043/2798289 – Govind