안드로이드(Android) ListView 멀티, 싱글 설정과 선택한 데이터 가져오는 방법

 

환경: Eclipse Mars, Android 4.2.2

 

이번에는 ListView 로 구현한 목록에서 체크한 항목의 값을 가져오는 방법에 대해 알아 보겠습니다. 리스트뷰는 아주 다양하게 쓰이는 위젯입니다. 화면을 직접 편집하지 않고 안드로이드에서 제공하는 상수 값을 이용해서 항목별로 멀티 선택을 할 수 있는 체크박스 추가합니다. 그리고 멀티 선택한 값을 버튼 클릭했을 때 전부 가져와서 화면에 표시합니다.

 

 

메인 Activity 에서는 ArrayAdapter 객체를 이용해서 ListView 에 데이터를 채웁니다. 멀티 선택을 할 수 있는 위젯을 만들려면 setChoiceMode 의 값에 ListView.CHOICE_MODE_MULTIPLE 상수값을 넘깁니다. 그리고 ArrayAdapter 에도 android.R.layout.simple_list_item_multiple_choice 로 세팅 해 줘야 합니다. 버튼을 클릭했을 때 ListView getCheckedItemPositions() 함수로 값을 리턴 받아 체크 여부를 판단합니다. booleans.get() true 이면 Toast 메시지에 값들을 표현하기 위해 문자열을 합칩니다.  

 

ListActivity.java

 

import android.app.Activity;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import com.example.sampleandroidinfo.R;

public class ListActivity extends Activity implements OnClickListener {

	private ListView mList;
	private Button mBtnGet;
	private String[] data = { "가", "나", "다", "라", "마" };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_list);
		
		mBtnGet = (Button) findViewById(R.id.btnGet);
		mBtnGet.setOnClickListener(this);
		
		mList = (ListView) findViewById(R.id.listView);
		mList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
		//mList.setBackgroundColor(Color.GREEN);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(
				getApplicationContext(),
				android.R.layout.simple_list_item_multiple_choice,
				data);
		mList.setAdapter(adapter);
	}

	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btnGet:
			SparseBooleanArray booleans = mList.getCheckedItemPositions();
			StringBuilder sb = new StringBuilder();
			for (int i = 0; i < data.length; i++) {
				if (booleans.get(i)) {
					sb.append(data[i]);
				}
			}
			Toast.makeText(getApplicationContext(), sb.toString(),
					Toast.LENGTH_SHORT).show();
			break;

		default:
			break;
		}
	}
}

 

메인 Activity 를 표현하기 위한 xml ListView 위젯만 있으면 됩니다.

 

activity_list.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#3F0099"
        android:gravity="center"
        android:paddingBottom="@dimen/abc_action_bar_icon_vertical_padding"
        android:paddingTop="@dimen/abc_action_bar_icon_vertical_padding"
        android:text="ListView 에서 멀티, 싱글 데이터 가져오는 방법"
        android:textColor="#FFFFFF" />
	<Button
            android:id="@+id/btnGet"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="리스트 데이터 가져오기" />
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" />
</LinearLayout>

 

안드로이드(Android) ListView 멀티, 싱글 설정과 선택한 데이터 가져오는 방법

 

그런데 ListView 위젯에 들어가는 글의 폰트 색상이 하얀색이라 잘 보이지가 않습니다. 그래서 리스트뷰의 색상을 바꿔 보았습니다. ListView 위젯의 setBackgroundColor() 함수를 사용하시면 됩니다. 기본적으로 배경색에 따라 폰트 색상도 자동으로 변경되면 좋은데 그게 안되네요.

mList = (ListView) findViewById(R.id.listView);
mList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
mList.setBackgroundColor(Color.GREEN);

안드로이드(Android) ListView 멀티, 싱글 설정과 선택한 데이터 가져오는 방법

 

Posted by 녹두장군

댓글을 달아 주세요

  1. 박경묵 2017.03.24 11:35  댓글주소  수정/삭제  댓글쓰기

    소스코드 잘 봤습니다. 혹시 죄송한데 Toast부분을 인텐트로 넘기려고하는데 잘 안되서 질문 올려봅니다.
    인텐트로 넘기려고하는데 자꾸 막혀서 어떻게 해야할지 모르겠네요ㅠㅠ

    • 김병희 2017.06.22 23:21  댓글주소  수정/삭제

      Toast 부분을 굳이 인텐트로 넘기지 않으면 안 되나요?
      if (booleans.get(i)) {
      al_mailChecked.add(al_mails.get(i));
      }
      이런 식으로 ArrayList 멤버변수 al_mailChecked에 추가하여 다른 데서 al_mailChecked 가져다 쓰면 되지 않을까요?

  2. 김병희 2017.06.22 23:22  댓글주소  수정/삭제  댓글쓰기

    항상 잘 보고 있습니다.
    감사합니다.

  3. Favicon of https://doh-an.tistory.com Dohan_dev 2019.07.01 17:15 신고  댓글주소  수정/삭제  댓글쓰기

    폰트색상은 res/color에 컬러셀렉터 xml로 구현해서 넣으시면 상태에 따라 바뀝니다