Как сделать по выбранному элементу не автоматически выбрать первую запись
Я создал счетчик, который автоматически обновляется с именами устройств, когда человек добавляет устройство, используя адаптер массива. Я создал метод OnItemSelected со счетчиком, поэтому, когда выбрано одно из имен в spinner, появится новое окно. Однако OnItemSelected автоматически выбирает первый элемент в списке, когда начинается действие, и поэтому у пользователя нет возможности сделать выбор до появления нового окна.
Вот код:
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
startActivity(new Intent("com.lukeorpin.theappliancekeeper.APPLIANCESELECTED"));
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
Кто-нибудь знает способ, по которому первый элемент в списке не будет автоматически выбран?
Вот код для остальной части счетчика:
ArrayAdapter<String> appliancenameadapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, ApplianceNames); //Sets up an array adapter containing the values of the ApplianceNames string array
applianceName = (Spinner) findViewById(R.id.spinner_name); //Gives the spinner in the xml layout a variable name
applianceName.setAdapter(appliancenameadapter); //Adds the contents of the array adapter into the spinner
applianceName.setOnItemSelectedListener(this);
Ответы
Ответ 1
Кто-нибудь знает способ, по которому первый элемент в списке не будет автоматически выбран?
В Spinner
всегда есть выбор, и вы не можете его изменить.
IMHO, вы не должны использовать Spinner
для запуска запуска активности.
При этом вы можете использовать boolean
для отслеживания, является ли это первым событием выбора, и игнорировать его, если оно есть.
Ответ 2
Если вы пытаетесь избежать первоначального вызова метода listener onItemSelected()
, другой вариант - использовать post()
, чтобы использовать очередь сообщений вида. В первый раз, когда счетчик проверяет ваш слушатель, он еще не будет установлен.
// Set initial selection
spinner.setSelection(position);
// Post to avoid initial invocation
spinner.post(new Runnable() {
@Override public void run() {
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// Only called when the user changes the selection
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
});
Ответ 3
Это сработало для меня,
private boolean isSpinnerInitial = true;
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
if(isSpinnerInitial)
{
isSpinnerInitial = false;
}
else {
// do your work...
}
}
Ответ 4
Объявить переменную isSpinnerInitial
затем сделайте "Сделать выбор" в качестве выбора по умолчанию
spinnertaggeview.setSelection(-1); не делает выбор как -1 или все не выбранным, как мы делаем на .Net или другом языке.
Поэтому вы можете игнорировать эту строку.
testStringArrayListinside.add("Make a Selection");
ADD this line so that this is selected by default and user never selects it
testStringArrayList = (ArrayList<String>) ClinqLinX.get("Tag");
boolean added = false;
testStringArrayListinside.add("Make a Selection");
for (String s : testStringArrayList) {
if (s != null || s != "") {
String[] results = s.split(","); // split on commas
for (String string : results) {
testStringArrayListinside.add(string);
Toast.makeText(getContext(), string, Toast.LENGTH_SHORT).show();
added = true;
}
}
}
if (added == false) {
testStringArrayListinside.add("Not tagged details found");
}
spinnertaggeview.refreshDrawableState();
}
// Adapter: You need three parameters 'the context, id of the layout (it will be where the data is shown),
// and the array that contains the data
if (testStringArrayListinside.size() > 0) {
adapter = new ArrayAdapter<String>(this.getContext(),android.R.layout.select_dialog_singlechoice, testStringArrayListinside);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Here, you set the data in your ListView
spinnertaggeview.setAdapter(adapter);
isSpinnerInitial = true;
spinnertaggeview.setSelection(-1);
spinnertaggeview.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
if (isSpinnerInitial){
isSpinnerInitial = false;
return;}
else{
TextView tv = (TextView) arg1;
String spinner_value = tv.getText().toString();
if (spinner_value.length() == 0) {
spinner_value = "Nothing";
}
String strusername = spinner_value;//As you are using Default String Adapter
Toast.makeText(getContext(), strusername, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(spinnertaggeview.getContext(), Userdetails.class);
intent.putExtra("Username", strusername);
spinnertaggeview.getContext().startActivity(intent);}
}