안드로이드

안드로이드 Spinner 사용법, entries 추가, entries 동적 추가

알통몬_ 2019. 7. 2. 09:17
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


안드로이드에서 스피너라는 어댑터를 제공합니다.

스피너가 무엇인가 하면, 아래 [갤러리 ▼] 요 녀석 입니다.


목록을 가려놨다가 탭하여 목록을 열고 

원하는 값을 볼 수 있는 거라고 생각하면 됩니다.

xml 에선 아래처럼 선언합니다.

<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/gallerySpinner"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>

요렇게만 추가하면 왼쪽 값을 비어있고 [빈공간 ▼]  이렇게만 표시가 되는데요.

여기서 목록에 들어갈 값들을 추가해주어야 하는데, 이값들을 entry 라고 하며

xml에서는 arrays.xml 에 선언된 배열을 추가할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string-array name="brand_name">
<item>Samsung</item>
<item>Apple</item>
<item>LG</item>
<item>Sony</item>
<item>Nokia</item>
</string-array>

</resources>
<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/gallerySpinner"
android:entries="@array/brand_name"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>


그리고 동적으로 추가하는 방법도 있는데요.

갤러리 폴더처럼 미리 값을 개발하는 과정에서 정적으로 넣는게 아니라

각 사용자마다 폴더 이름과 수가 다른 경우처럼 동적으로 받아올 때 사용합니다.


갤러리 폴더 목록가져오기.

2019/07/02 - [안드로이드] - 안드로이드 갤러리 폴더 목록 가져오기

이전 포스팅에서 가져온 갤러리 폴더 목록을 동적으로 추가하는 방법입니다.

먼저 item.xml 이 필요합니다.

폴더 이름만 있으면 되니 간단하게 AppCompatTextView만 넣었씁니다.

item_folder.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.AppCompatTextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:textSize="16sp">
</androidx.appcompat.widget.AppCompatTextView>
File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
String[] folders = file.list();
ArrayList<String> folderList = new ArrayList<>();
for(String folder : folders) {
Collections.addAll(folderList, folder);
}
folderList.add(0, "갤러리");

binding.gallerySpinner.setAdapter(new ArrayAdapter<>(this, R.layout.item_folder, folderList));

요렇게 동적으로 추가해주면 되겠습니다.

folders 문자열 배열을 folderList 대신 넣어줘도 됩니다.

각 entry를 클릭했을 때 동작을 추가하려면 setOnItemClickListener에 동작을

추가해주면 됩니다.

binding.gallerySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});

이상입니다. 감사합니다.

반응형