마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리스트뷰 커스텀마이징 질문드립니다

0 추천

안녕하세요 ^^ 리스트뷰를 써야 할 일이 생겨서 검색해가며 배우고 있는데

 

아무리 찾아도 제가 원하는 리스트 뷰는 없는것 같아서 질문드립니다;

 

제가 원하는건 그림처럼 무한 리스트뷰 이런게 아니라 슬라이드메뉴에 들어갈 리스트뷰인데

 

5줄 ~6줄만 있으면 되는데 중요한건 안에 들어가는 내용이 다 다르다는겁니다;

 

첫번째 줄은 그림만, 두번째는 토글 , 세번째는 글만 뭐 이렇게 넣을껀데 아무리 찾아도 똑같은 row를 반복하는

 

글밖에 안보여서 질문드립니다 ㅠ 어떻게 하면되나요?? 짧게 개념만 설명해주시면 나머진 제가 찾아보겠습니다

 

 

껄껄앱 (1,910 포인트) 님이 2016년 2월 29일 질문

3개의 답변

+1 추천
 
채택된 답변

리스트뷰에 이해도가 높으면 간단한데요.

리스트뷰는 일반적으로 어댑터를 가져다 사용하는데 -ex) listView.setAdapter(list);

어댑터쪽에 보면 getView라는 메소드를 오버라이드 하도록 되어 있습니다.

getView라는 건 리스트뷰의 하나의 항목을 리턴하는 건데요.

위의 캡쳐처럼 된다면 4개의 항목, 즉 4번의 getView가 호출되어 리스트뷰를 구성하는 겁니다.

 

따라서 getView메소드 안에 항목을 구성할 레이아웃을 커스터마이징 하면 손쉽게 만들 수 있죠.

물론 왜 저걸 굳이 리스트뷰로 만드시는지는 모르겠지만 ^^;

 

getView 소스는 대충 이렇습니다.

 

 public View getView(int position, View convertView, ViewGroup parent) {
            View view = convertView;
            final ViewHolder gridViewHolder;

            if(convertView == null){
                view =  mGalleryActivity.getLayoutInflater().inflate(R.layout.gallery_thumbnail_item, parent, false);
                gridViewHolder = new ViewHolder();
                gridViewHolder.imageView = (ImageView) view.findViewById(R.id.thumbnail_image);
                gridViewHolder.imageView.setMaxWidth(80);
                gridViewHolder.imageView.setMaxHeight(80);
                view.setTag(gridViewHolder);
            }else{
                gridViewHolder = (ViewHolder) view.getTag();
            }

 

레이아웃 인플레이터로 XML파일을 전개하는 코드가 있지요.

즉, 리스트 뷰의 항목 화면을 xml로 만드는겁니다.

질문자처럼 4개 각각 다른 항목을 구성하고 싶으시다면

xml안에 그림, 토글, 텍스트,,, 등의 뷰들을 작성하고

getView에서 전달받은 파라미터인 position 값에 따라 그림을 보여줄지 말지,

토글을 보여줄지 말지 등등을 설정하면됩니다.

position은 항목 인덱스 이고, 0일때 첫번째 항목, 1일때 두번째 항목.. 입니다.

그래서 position이 0일때 그림은 VISIBLE 하면 되고 텍스트랑 토글은 GONE이나 INVISIBLE하면 될듯.

 

 

치솟음 (3,710 포인트) 님이 2016년 3월 2일 답변
껄껄앱님이 2016년 3월 2일 채택됨
와 상세한 답변 감사합니다 ! ^_^
+1 추천
리스트뷰를 사용해야하는 이유가 있나요??
지나가는참새 (640 포인트) 님이 2016년 2월 29일 답변
답변감사합니다!
리스트뷰가 딱딱 정렬되서 나오니까 리스트뷰써야지! 라고 생각했습니다;; 어짜피 커스텀 레이아웃으로 할꺼면 그냥 레이아웃 직접 만들어서 바로 적용시켜도 된다는 말씀으로 해석해도 되나요? 그게 더 간편하려나요?
동일한 여러개의 아이템 리스트를 보여주는게 아니고 슬라이드면 저 화면 하나만 필요하다면 그냥 저 레이아웃만 짜면 될 것 같아서요~
음.. 일단 그렇게 해보겠습니다 감사합니다 ! ^^
+1 추천
이건 리스트뷰를 하던 그냥 하드코딩으로 만들던 뭘로 해도 상관없지만

별로 변화의 여지가 없으면 그냥 xml 자체에서 만들어도 무관하구요,

리스트뷰를 쓰면 확장성이나 유지보수 측면에서 편하게 할수있습니다.

저라면 저 레이아웃의 구성을 이렇게 구성합니다.

크게보면 제일위의 그림은 전혀 형태가 다르고, 밑에 리스트 형태들은 텍스트의 위치나 형태를 보아 아주 유사합니다.

일단 그림쪽은 listview의 헤더로 구현합니다.

1. 그림쪽만 xml을 따로 하나 만들어서 view를 만들어주고 listview의 헤더로 세팅합니다.

2. 2번의 토글버튼형태의 셀을 하나 만들고 토글 버튼을 gone상태로 유지합니다.

listview안에 들어갈 내용을 담은 ArrayList<Data>라고 치고 ,

Data클래스에 boolean값 등 간단하게 구별할수 있는 변수를 하나 추가합니다.

3. Adapter에서 getview시에 추가한 boolean값이 true일때 토글버튼 visible 처리, 아닐때 gone 처리

요런식으로 하시면 조금 복잡하지만 추가삭제가 용이해집니다.
캬옹이 (37,920 포인트) 님이 2016년 3월 2일 답변
상세한 답변 정말 감사합니다 ^_^
...