Android에서 스피너에 항목을 추가하는 방법은 무엇입니까?


107

스피너에 항목을 추가하는 방법은 무엇입니까?


1
당신이 adapter.notifyDataSetChanged을 동적으로 추가 목록에 항목을 추가하고 호출 할 경우 ()
아속 버즈

답변:


144

XML 파일 :

<Spinner
    android:id="@+id/Spinner01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

자바 파일 :

public class SpinnerExample extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String[] arraySpinner = new String[] {
            "1", "2", "3", "4", "5", "6", "7"
        };
        Spinner s = (Spinner) findViewById(R.id.Spinner01);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, arraySpinner);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s.setAdapter(adapter);
    }
}

스피너 예제를 참조하십시오 .


7
이 이론적으로 질문에 대답 수 있지만, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Bill the Lizard

그것을 더 많이 보이는이 android.R.layout.simple_spinner_item 대신이 android.R.layout.simple_spinner_dropdown_item를 사용
SAI Gorantla

array_spinner 란 무엇입니까? 배열의 이름은 arraySpinner입니다. 철자 오류
입니까 아니면

1
추가 고려 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);(전에 s.setAdapter(adapter);더 나은 드롭 다운 모습을 확인합니다.
금지 - 지구 공학

1
@StephenM 링크 변경
pankajagarwal

99

또 다른 옵션을 찾았습니다 : 레이아웃 파일의 스피너 정의

<Spinner android:id="@+id/spinner"
    android:layout_width="fill_parent"
    android:drawSelectorOnTop="true"
    android:prompt="@string/spin"
    android:entries="@array/spinnerItems"
/>

array.xml 파일의 항목 정의 :

<resources>
    <string-array name="spinnerItems">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
        <item>item4</item>
    </string-array>
</resources>

코드의 전체 소스에 대한 링크


나는 위의 모든 방법과 몇 가지 다른 튜토리얼을 시도했지만 이것이 나에게 일한 유일한 방법입니다. 정말 고맙습니다!
snapplex

@snapplex;)
maxivis

1
이것이 최고의 대답이어야합니다. 깨끗한.

30

이 코드를 시도하십시오.

final List<String> list = new ArrayList<String>();
list.add("Item 1");
list.add("Item 2");
list.add("Item 3");
list.add("Item 4");
list.add("Item 5");

final String[] str = {"Report 1", "Report 2", "Report 3", "Report 4", "Report 5"};

final Spinner sp1 = (Spinner) findViewById(R.id.spinner1);
final Spinner sp2 = (Spinner) findViewById(R.id.spinner2);

ArrayAdapter<String> adp1 = new ArrayAdapter<String>(this,
                              android.R.layout.simple_list_item_1, list);
adp1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp1.setAdapter(adp1);

ArrayAdapter<String> adp2 = new ArrayAdapter<String>(this,
                                  android.R.layout.simple_spinner_item, str);
adp2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp2.setAdapter(adp2);

sp1.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), list.get(position), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

sp2.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), str[position], Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

String array xml 파일을 통해 스피너 항목 값을 추가 할 수도 있습니다.

<resources>
    <string name="app_name">Spinner_ex5</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">MainActivity</string>
    <string-array name="str2">
        <item>Data 1</item>
        <item>Data 2</item>
        <item>Data 3</item>
        <item>Data 4</item>
        <item>Data 5</item>
    </string-array>
</resources>

mainActivity.java에서 :

final Spinner sp3 = (Spinner) findViewById(R.id.spinner3);
ArrayAdapter<CharSequence> adp3 = ArrayAdapter.createFromResource(this,
                                    R.array.str2, android.R.layout.simple_list_item_1);

adp3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp3.setAdapter(adp3);
sp3.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            String ss = sp3.getSelectedItem().toString();
            Toast.makeText(getBaseContext(), ss, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

9

Spinner에 항목을 추가하려면 한 가지를 수행하고 어댑터를 만든 다음 어댑터에 항목을 추가 / 제거한 다음 setAdapter()메서드 를 사용하여 해당 어댑터를 Spinner에 쉽게 바인딩 할 수 있습니다 .

다음은 예입니다.

spinner.setAdapter(adapter);
adapter.add(item1);
adapter.add(item2);
adapter.add(item3);
adapter.add(item4);
adapter.add(item5);
adapter.notifyDataSetChanged();
spinner.setAdapter(adapter);

UR 회신에 대한 고맙습니다 나는 해결책을 얻었습니다. 지금 나는 그것에 하나의 문제에 직면하고 있습니다.

내가 선택한 항목을 가져오고 싶습니다. 즉, 위치를 다른 메서드에 전달하고 싶습니다. dataspin.setOnItemSelectedListener (new myitemlistener ());

dataspin 내 스피너 객체입니다

@Override public void onItemSelected (AdapterView <?> parent, View view, int position, long id) {// TODO 자동 생성 메서드 stub String p = parent.getItemAtPosition (position) .toString (); int pos = (int) parent.getItemIdAtPosition (position); System.out.println ( "스피너 위치 ..."+ pos); setSearchView (pos); }

스피너 항목이 표시되지 않는 것보다 이렇게하면

8
<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>

레이아웃에서 :

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />

그러면 선택한 항목을 어떻게 얻습니까?
Demotivated

1
Java 파일의 첫 번째 TypeCast. 그런 다음 Spinner spinner를 사용합니다. spinner = findViewById (R.id.spinner); spinner.setOnItemClickListener (new AdapterView.OnItemClickListener () {@Override public void onItemClick (AdapterView <?> parent, View view, int position, long id) {}});
ZIA ANSARI

5

이 코드는 기본적으로 JSON 배열 객체를 읽고 각 행을 매개 변수로 전달되는 스피너의 옵션으로 변환합니다.

public ArrayAdapter<String> getArrayAdapterFromArrayListForSpinner(ArrayList<JSONObject> aArrayList, String aField)
{
    ArrayAdapter<String> aArrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item);
    aArrayAdapter.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item); //android.R.layout.simple_spinner_dropdown_item
    try {
        for (int i = 0; i < aArrayList.size(); i++)
        {
            aArrayAdapter.add(aArrayList.get(i).getString(aField)); 
        }
    } catch (JSONException e) {
        e.printStackTrace();
        ShowMessage("Error while reading the JSON list");
    }
    return aArrayAdapter;       
}

2

XML 레이아웃에 스피너를 추가 한 후 다음 코드를 Java 파일에 추가합니다.

Spinner spinner;
spinner = (Spinner) findViewById(R.id.spinner1) ;
java.util.ArrayList<String> strings = new java.util.ArrayList<>();
strings.add("Mobile") ;
strings.add("Home");
strings.add("Work");
SpinnerAdapter spinnerAdapter = new SpinnerAdapter(AddMember.this, R.layout.support_simple_spinner_dropdown_item, strings);
spinner.setAdapter(spinnerAdapter);

1

목록을 업데이트 한 후이 코드를 추가하십시오.

다음을 가정하십시오.

ArrayAdapter <String> 변수 이름은 dataAdapter 이고 List 변수 이름은 keys 입니다.

  • dataAdapter.addAll (keys);
  • dataAdapter.notifyDataSetChanged ();

1

Spinner에 항목하나 더 추가하려면 다음을 수행하세요.

ArrayAdapter myAdapter = 
  ((ArrayAdapter) mySpinner.getAdapter());

myAdapter.add(myValue);

myAdapter.notifyDataSetChanged();

"UnsupportedOperationException"발생
abbasalim

0

어댑터를 지우고 모든 itens를 추가하고 아래와 같이 변경 사항을 알리기 만하면됩니다.

  public void show(List<Object> objLIst) {
    adapter.clear();
    adapter.addAll(objLIst);
    adapter.notifyDataSetChanged(); }

0

더 쉬운 방법은 재질 스피너 라이브러리를 사용하는 것입니다 : https://github.com/jaredrummler/MaterialSpinner

먼저 프로젝트에 추가하십시오.

compile 'com.jaredrummler:material-spinner:1.2.4'

다음과 같이 사용하십시오.

<com.jaredrummler.materialspinner.MaterialSpinner
    android:id="@+id/spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

Java에 항목을 쉽게 추가 할 수있는 Java 코드 :

MaterialSpinner spinner = (MaterialSpinner) findViewById(R.id.spinner);
spinner.setItems("item 1", "item 2", "item 3", "item 4", "item 5");
spinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() {

  @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) {
    Snackbar.make(view, "Clicked " + item, Snackbar.LENGTH_LONG).show();
  }
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.