태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

#11. List 집중공략! - (2) 여러가지 ListView 만들어보기

2009.06.01 03:19

이번에는 지난 시간에 이어서 여러가지 ListView에 대해 알아보겠습니다.

1. 한 항목을 선택할 수 있는 ListView
마치 콤보박스와 같은 역할을 하는 ListView입니다.


package com.androidhuman.ListExample;

import java.util.ArrayList;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListExample extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ArrayList list = new ArrayList();
        list.add("커니의 안드로이드 이야기");
        list.add("안드로이드사이드");
        list.add("Google");
        
        ArrayAdapter aa = new ArrayAdapter(this,
        		android.R.layout.simple_list_item_single_choice, list);
        
        ListView lv = getListView();
        
        lv.setAdapter(aa);
        lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        
    }
}

 

특별한 것은 없고, ArrayAdapter에서 레이아웃을 위와 같이 simple_list_item_single_choice로 바꿔주신 후, setChoiceMode()메소드를 통해 선택할 수 있는 항목의 개수를 설정해주시면 됩니다. 위의 경우는 한 가지만 선택하면 되므로, CHOICE_MODE_SINGLE을 사용하였습니다.

*XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<EditText android:layout_height="wrap_content" 
android:id="@+id/toAdd" android:hint="추가할 텍스트를 입력하세요."
android:layout_width="fill_parent"/>

<ListView android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/list"/>

</LinearLayout>


2. 여러 항목을 선택할 수 있는 ListView

위에서 본 것과 다를 것이 별로 없습니다. 어댑터에서 리스트의 모양과 리스트에서 선택할 항목의 개수를 변경시켜주면 됩니다.


ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
        		android.R.layout.simple_list_item_multiple_choice, list); // multiple_item으로 변경
        
        ListView lv = getListView();
        
        lv.setAdapter(aa);
        lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); // CHOICE_MODE_MULTIPLE로 변경


강좌 작성환경
SDK Version : Android SDK 1.5, release 2
ADT Version : 0.9.1

추후 SDK업데이트로 인해 글의 내용과 실제 내용간 차이가 있을 수 있습니다.

커니 유저 인터페이스/뷰(View) , , , ,

  1. Blog Icon
    はんくっいん

    ちょっと自信がないけれども
    <ListView android:layout_width="wrap_content" -> fill_parentではないかな。。。。
    そうしないと画面が崩れてしまうんだね。

  2. 通常はfill_parentを使用しており、早急に作るかみるとwrap_contentをfill_parentに変更されていません。 ^ ^

  3. Blog Icon
    한국인

    <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/list"></ListView> 에서 android:id="@+id/list" 로 설정하면 런타임 에러가 발생하고
    android:id="@android:id/list" 로 설정하면 실행되는 이유는 뭘까요?

    커니님의 강좌를 보고 열심히 공부하고 있습니다. 감사합니다.

  4. id를 @id/list로 설정해도 에러가 나는지요?
    에러가 난다면 LogCat으로 에러를 찍어 보여주세요~

  5. Blog Icon
    한국인

    @id/list 로 설정하면 실행전에 이클립스에서 에러나요

    이클립스 문제텝에서 보여지는에러는
    ERROR Error: No resource found that matches the given name (at 'id' with value '@id/list')

    궁금한것은 다른 테그들은 @+id/로 하는데 ListView만 android:id/list로 하는것이 문법인가요?
    프로그램 완전 초보라 거의 이해 보다는 외우는 식이라서 ^^

    커니님의 강좌를 보고 열심히 공부하고 있습니다. 감사합니다

  6. http://developer.android.com/guide/topics/resources/resources-i18n.html#ReferencesToResources

    여길 참조하세요.
    앞에 '@'를 붙이는 것은 참조를 의미하는데, 그냥 @id/xxx... 은 기본 패키지를 참조하는것이고, 여기에서 사용하는 것처럼 @android:id/xxx... 는 android 패키지를 참조하는 것을 의미합니다.

  7. List 강좌 잘봤습니다 ^^

    #11. List 집중공략! - (1) 강좌도 보고싶은데.. 혹시 지우셨는지요.. 못찾겠네요

  8. 이름만 바뀌었습니다~ 내용 업데이트하느라요

  9. Blog Icon

    음.. 저기에서 체크된 항목들을 지워보려고 하는데요...
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); <-- 이건 단순히 MODE에 관한 건가요??;;
    체크된 내용을 지우려면.. 몇 번째 항목에 체크가 되있는지를 알아야 될텐데..
    잘 감히 안잡히네요..^^;;;
    조언부탁드려요~

  10. http://developer.android.com/reference/android/app/ListActivity.html#onListItemClick(android.widget.ListView, android.view.View, int, long)

    참고하세요.

  11. Blog Icon
    정연맘

    집중공략 (1)은 제목만 바뀌셨다고 했는데 무슨 제목으로 바뀌셨는지요.. 잘 못찾겠네요

    그리고 중간에 ListView lv = getListView(); 에서 getListView가 선언이 되어있지 않다고 하는데

    private로 선언 해줘야하나요??

  12. listview로 검색해주세요

  13. Blog Icon
    일몰

    잘 봤습니다. 그런데 저도 위에 분과 같이 getListView가 선언 되어 있지 않다고 뜨네요. listview로 검색해도 모르겟네요. 해결방안이나 링크를 부탁드릴 수 있을까요?

  14. 액티비티가 ListActivity가 아니여서 그렇습니다. getListVView() 메서드는 ListActivity에서만 제공하는 메서드입니다.

  15. Blog Icon
    정말로

    정말로 감사드려요
    정말
    최고에요 ㅜ

  16. Blog Icon
    샤우

    언제나 커니님 강좌보면서 공부하고 있습니다~

    윗분 말대로 xtml에 android:id="@+id/list" 를 android:id/list로 바꾸지 않으면 에러가 나더라고요.

    제 생각은, listActivity를 상속받아서 쓰기때문에, ListView lv = getListView(); 이구문에서 id를 지정하는 값이 없으니까 에러가 나는거 같아요 ㅎㅎ 그래서 정해진값? 이라고 해야될가 아이디를 지정해주면 오류 없이 잘되는거같아요 ㅎ

  17. 네 맞습니다.
    ListActivity는 내부적으로 리스트뷰의 id를 @android:id/list 로 할당하고 있기에, 표시할 리스트의 id 를 꼭 변경해주어야 합니다~

  18. Blog Icon
    졸작중

    커니님,
    강의 잘 보고 있어요 감사드립니다.
    다름이 아니라 체크박스 리스트 뷰 경우에
    리스트에 있는 것들을 체크한 후 ok 버튼을 눌렀을때
    체크된것만 디비에 저장하려고 합니다.

    이때 체크 된것이 뭔지 알려면 하나하나 ischecked로 검사해야 하는건가요?

    어떻게 하는거죠?
    꼭 답변부탁드립니다 ㅠㅠ

  19. 답변이 많이 늦었지만..ㅠㅠ 그 방법을 사용해도 되고, http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html 를 사용하셔도 됩니다.

    단, 이 경우에는 ListView의 choice mode를 설정해 주셔야 합니다.
    http://developer.android.com/reference/android/widget/AbsListView.html#setChoiceMode(int)