[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>가 확인되지 않은 방법에 대한 경고가 표시됩니다 . 실제로 ArrayAdapterMerrill처럼 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;
}