'리스트뷰'에 해당되는 글 2건

  1. 2012.08.01 안드로이드 리스트뷰 추가 삭제
  2. 2012.08.01 안드로이드 리스트 뷰
728x90

추가되는 과정

1.사용자가 텍스트를 입력한다.

2.추가 버튼을 누른다

2-1.문자열이 데이터 부분에 저장된다.

2-2.변경된 문자열이 있음을 어댑터가 알고 리스트 뷰한테 변경된 데이터의 값을 알림과 동시에 값을 바뀌게 하게끔 알린다.

3.문자열을 리스트뷰에 보여준다.

 

2-1 : 자바 코드상에 선언된 ArrayList에 추가한다

2-2 : adapter.notifyDataSetChanged();

 

main.xml

ListViewTestActivity01.java

붉게 표시된 부분이 중요 코드 이며

데이터에 추가하고 어댑터가 리스트 뷰한테 알려주는 과정이다

다만 notifyDataSetChanged()라는 메소드가 리스트뷰 갱신을 위하여 쓰여진다 라는 정도만 알고 가면 좋다.

 

위의 코드에서 파란색으로 표시된 부분은  항상 같이 따라 다녀야 한다. 

android.R.layout.simple_list_item_single_choice 

--> 리스트뷰 모양을 우측에 라디오 버튼을 추가해서 선택할 수 있도록 해라.


list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

--> 리스트뷰를 한개 선택할 수 있도록 해라.


보이는 것처럼 위의 두녀석은 항상 붙어 다닌다. 뷰 모양은 1개 선택인데 리스트뷰의 선택모드는 선택안됨으로 되어 있으면 말이 안되지만

그렇다고 에러는 나지 않는다. 다만 그에 따라 선택이 되지 않을 뿐 이다.

 

삭제하는 과정

1.리스트 뷰에서 여러개를 선택한다.

1.1 여러개를 선택해야 하므로 리스트뷰의 레이아웃은 android.R.layout.simple_list_item_multiple_choice

1.2 여러개가 선택되어야 하므로 리스트 뷰의 모드는 setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)

2.삭제 버튼을 누른다.

3.선택된 녀석들을 가지고 와서 데이터에서 삭제한다.

4.리스트 뷰를 갱신한다.

 

main.xml

ListViewTestActivity02.java

첫 예제와 거의 동일하지만 붉은 표시 코드 부분만 다르게 작성되어잇는걸 알수 있다.

mAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice, dataArr);

list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

가장 먼저 하여야한다 여러개를 선택해야 하므로 뷰의 레이아웃과 모드를 모두 변경 시켜 주어야지만 반영이 된다.

반드시 같이 움직인다는것도 잊지 말아야 한다.

 

SparseBooleanArray checkArr = list.getCheckedItemPositions();

if (checkArr.size() != 0) {

     for (int i = list.getCount() -1; i > -1 ; i--) {

          if (checkArr.get(i)) {

               dataArr.remove(i);

          }

             }

}

1.첫번째 다중선택시 리스트로부터 받아오는 값은 선택된 SparseBooleanArray 형태의 객체이다.

boolean형태의 배열이 아닌 객체 형태 이다. ArrayList와 비슷하고. 리스트뷰의 모든 값을 저장하고 있으며 선택되었으면 해당위치가 true, 선택되지 않았다면 해당위치는 false로 저장되어 있다. 그러니 루프문을 돌면서 checkArr.get(i) 가 참이면 선택되었다. 라는 뜻이므로 해당 위치는 삭제를 하면 된다.

 

2. 여러개의 데이터를 삭제할때는 처음부터가 아닌 반드시 꼭 마지막 부터 삭제하라.

첫번째 데이터인 0번부터 삭제를 하면 문제가 발생할때가 있다.

 

0번(1) 2번(3)순으로 삭제 하기를 원한다면

 

 

결과가 다르게 나와 버린다.

그래서 뒤에서 부터 삭제하는 것을 권장한다.

 

728x90
Posted by 정망스
,
728x90

리스트 뷰는 어댑터 뷰의 대표 위젯으로 수직으로 데이터를 보여줄 때 주로 사용된다.

전화번호목록, 최신통화목록, 문자 목록등 많은 양의 데이터를 수직으로 보여줄때 용이하다.

다른 위젯들 역시 동작 방식이 유사하므로 리스트 뷰만 재대로 익힌다면 나머지 위젯또한 쉽게 익힐 수 있다.

 

리스트 뷰를 사용하기 위해서는 3가지가 필요하다.

1.뷰 : 실제로 화면에 보여준다

2.어댑터 : 뷰와 데이터 사이의 중간 매개체 역할

3.데이터 : 보여줄 실제 데이터

 

main.xml

ListViewTestActivity.java

예제의 어댑터 부분을 보면 매개 변수 부분중에 android.R.layout.simple_list_item_1 부분이 있는데

우리가 res/layout 폴더안에 aaa.xml 파일을 만들면 자바코드에서 R.layout.aaa 형태로 사용이 가능하다. 마찬가지로 이미 안드로이드 sdk안에 만들어진 몇개의 xml 파일들이 있는데, 그 녀석들을 사용할때 android.R.xxx 형태로 쓰는것!
즉 위에서 사용된 android.R.layout.simple_list_item_1 이 부분은 " 안드로이드가 미리 만들어 놓은 레이아웃 중에 simple_list_item_1.xml 파일을 읽어와라" 라는 뜻이다.  

 

그외 ListView에서 사용되는 기본 레이아웃들.

 

 정의되어 있는 xml 파일

 설명

 simple_list_item_1

 텍스트 뷰 하나로 구성된 레이아웃

 simple_list_item_  텍스트 뷰 두개로 구성된 레이아웃
 simple_list_item_checked  오른쪽에 체크 표시가 된다

 simple_list_item_single_choice

 오른쪽에 라디오 버튼이 나온다
 simple_list_item_multiple_choice  오른쪽에 체크 버튼이 나온다

 

데이터 부분을 xml 로도 선언 가능하다

 

/res/values/arrays.xml

<?xml version=“1.0” encoding=“utf-8”?>

<resources>

        <string-array name=“listitems”>

                <item>Java</item>

                <item>Jsp</item>

                <item>Ejb</item>

                <item>Android</item>

                <item>자바</item>

                <item>안드로이드</item>

                <item>스프링</item>

                <item>스트럿츠</item>

        </string-array>

</resources>


코드수정

ArrayList<String> dataArr = new ArrayList<String>();

     dataArr.add("JAVA");

     dataArr.add("JSP");

     dataArr.add("EJB");

     dataArr.add("ANDROID");


     ArrayAdapter<String> Adapter = new ArrayAdapter<String>  (this, android.R.layout.simple_list_item_1, dataArr);


위의 부분을 아래와 같이 수정.

ArrayAdapter<CharSequence> Adapter = 

ArrayAdapter.createFromResource(this, R.array.country, android.R.layout.simple_list_item_1);

특별히 달라진건 없지만 자바코드의 양이 줄었다.

 

데이터가 수시로 추가되고 삭제되고 변경이 자주 생긴다면 자바코드에서 데이터를 만들고

데이터의 변경 값이 일정하다면 xml 상에 데이터를 만드는 것이 편리하다

 

대표적으로 많이 쓰는 ListView의 속성

1. android:divider 

  - 항목 사이사이의 구분선을 설정한다. RGB로 색상을 지정하거나 Drawable로 설정가능하다.


2. android:dividerHeight

  - 구분선의 높이를 설정한다.


3. android:entries

 - 리스트뷰에 표시할 배열을 지정한다. static 배열이라면 이녀석으로 사용이 가능하다.


4. android:footerDividersEnabled

 - 만약에 false로 설정을 하면 리스트뷰의 바닥뷰(footer View)를 보기 전까지 구분선을 그리지 않는다. 기본값은 true.


5. android:headerDividersEnabled

 - 만약에 false로 설정을 하면 리스트뷰의 헤더뷰(header view)를 본 후에 구분선을 그리지 않는다. 기본값은 true.


6. android:choiceMode

 - 항목 선택 모드를 결정한다. 아래의 모드를 통해 1개 또는 여러개의 선택이 가능하다.

 

 속성값(xml 사용)

 java 파일에서 사용할때 변수 값

설명

 none

 CHOICE_MODE_NONE

 항목 선택이 불가능

 singleChoice  CHOICE_MODE_SINGLE  항목 하나를 선택 가능
 multipleChoice  CHOICE_MODE_MULTIPLE  항목 여러개를 선택 가능

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침