[java] Spinner의 선택된 항목을 위치가 아닌 값으로 설정하는 방법은 무엇입니까?
Spinner의 데이터베이스에 저장된 값을 미리 선택 해야하는 업데이트보기가 있습니다.
나는 이런 식으로 생각하고 있었지만 방법 Adapter
이 없기 indexOf
때문에 붙어 있습니다.
void setSpinner(String value)
{
int pos = getSpinnerField().getAdapter().indexOf(value);
getSpinnerField().setSelection(pos);
}
답변
Spinner
이름이 mSpinner
이고 선택 사항 중 하나로 “일부 값”이 포함되어 있다고 가정하십시오 .
Spinner에서 “일부 값”의 위치를 찾아 비교하려면 다음을 사용하십시오.
String compareValue = "some value";
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.select_state, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(adapter);
if (compareValue != null) {
int spinnerPosition = adapter.getPosition(compareValue);
mSpinner.setSelection(spinnerPosition);
}
답변
값을 기준으로 스피너를 설정하는 간단한 방법은
mySpinner.setSelection(getIndex(mySpinner, myValue));
//private method of your class
private int getIndex(Spinner spinner, String myString){
for (int i=0;i<spinner.getCount();i++){
if (spinner.getItemAtPosition(i).toString().equalsIgnoreCase(myString)){
return i;
}
}
return 0;
}
복잡한 코드로가는 길은 이미 존재합니다.
답변
Spinners의 모든 항목에 대해 별도의 ArrayList를 유지합니다. 이렇게하면 ArrayList에서 indexOf를 수행 한 다음 해당 값을 사용하여 Spinner에서 선택을 설정할 수 있습니다.
답변
Merrill의 답변을 바탕 으로이 단일 라인 솔루션을 생각해 냈습니다 … 매우 예쁘지는 않지만이 Spinner
기능을 포함하지 않는 코드를 유지 관리하는 사람을 비난 할 수 있습니다 .
mySpinner.setSelection(((ArrayAdapter<String>)mySpinner.getAdapter()).getPosition(myString));
에 대한 캐스트 ArrayAdapter<String>
가 확인되지 않은 방법에 대한 경고가 표시됩니다 . 실제로 ArrayAdapter
Merrill처럼 a를 사용할 수 는 있지만 하나의 경고를 다른 경고로 교환합니다.
답변
문자열 배열을 사용하는 경우 이것이 가장 좋은 방법입니다.
int selectionPosition= adapter.getPosition("YOUR_VALUE");
spinner.setSelection(selectionPosition);
답변
이것을 사용할 수도 있습니다.
String[] baths = getResources().getStringArray(R.array.array_baths);
mSpnBaths.setSelection(Arrays.asList(baths).indexOf(value_here));
답변
이전 어댑터에 indexOf 메소드가 필요하고 기본 구현을 모르는 경우 다음을 사용할 수 있습니다.
private int indexOf(final Adapter adapter, Object value)
{
for (int index = 0, count = adapter.getCount(); index < count; ++index)
{
if (adapter.getItem(index).equals(value))
{
return index;
}
}
return -1;
}