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 정망스
,


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