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

제가 비효율적으로 코딩하는거 같아서 질문드립니다..

0 추천

제가 너무 비효율적으로 하는건 아닌지..

 

먼저 레이아웃에 6개의 레이아웃과 텍스트뷰와 이미지뷰가 있습니다.

이게 현재 모두 투명인 상태이고 상황에따라서 3개가 보여질수도 4개가 보여질수도 있습니다.

참고사항으로 레이아웃의 백그라운드이미지와 텍스트뷰 내용만 경우에 따라 변경이 되고,

이미지뷰의 이미지는 계속 하나의 이미지를 사용합니다.

 

그래서 저는 이렇게 했습니다.

 

각각(레이아웃, 텍스트뷰, 이미지뷰)6개의 배열을 잡고 각각의 객체를 생성하였고

그리고 각각 배열의 주소값을 가지고 for를 돌면서 로직처리를 하였습니다.

 

바로 이런 방식이죠.

 

 

sectionAddLayArr[0] = (LinearLayout)convertView.findViewById(R.id.section_add_lay0);
sectionAddLayArr[1] = (LinearLayout)convertView.findViewById(R.id.section_add_lay1);
sectionAddLayArr[2] = (LinearLayout)convertView.findViewById(R.id.section_add_lay2);
sectionAddLayArr[3] = (LinearLayout)convertView.findViewById(R.id.section_add_lay3);
sectionAddLayArr[4] = (LinearLayout)convertView.findViewById(R.id.section_add_lay4);
sectionAddLayArr[5] = (LinearLayout)convertView.findViewById(R.id.section_add_lay5);
 
sectionAddTextView[0] = (TextView)convertView.findViewById(R.id.section_add_textview0);
sectionAddTextView[1] = (TextView)convertView.findViewById(R.id.section_add_textview1);
sectionAddTextView[2] = (TextView)convertView.findViewById(R.id.section_add_textview2);
sectionAddTextView[3] = (TextView)convertView.findViewById(R.id.section_add_textview3);
sectionAddTextView[4] = (TextView)convertView.findViewById(R.id.section_add_textview4);
sectionAddTextView[5] = (TextView)convertView.findViewById(R.id.section_add_textview5);
 
sectionDelete[0] = (ImageView)convertView.findViewById(R.id.section_add_delete0);
sectionDelete[1] = (ImageView)convertView.findViewById(R.id.section_add_delete1);
sectionDelete[2] = (ImageView)convertView.findViewById(R.id.section_add_delete2);
sectionDelete[3] = (ImageView)convertView.findViewById(R.id.section_add_delete3);
sectionDelete[4] = (ImageView)convertView.findViewById(R.id.section_add_delete4);
sectionDelete[5] = (ImageView)convertView.findViewById(R.id.section_add_delete5);
 
이렇게 하여 for를 돌면서 이벤트 처리도 하고 조건 비교도 하여
상황에 맞게 레이아웃의 백그라운드 이미지나 텍스트뷰 내용을 변경하고..
상황에 맞게 이미지뷰의 이미지를 투명에서 보이게끔 처리를 하였습니다.
 
이렇게 하긴 하는데 뭔가 이상한 느낌이 듭니다...
이렇게 처리하고 있는게 올바른건가요;;
 
갸아악 (21,260 포인트) 님이 2013년 3월 7일 질문

3개의 답변

0 추천
뭐,.. 취향 따라, 상황에 맞게 하는 거죠. 정답은 없습니다.

for (i=0; i<6; i++) sectionAddLayArr[i] = (LinearLayout)convertView.findViewById(R.id.section_add_lay0+i);

로 하셔도 됩니다.

ID 의 연속 여부는 gen/.../R.java 에서 확인 하시면 됩니다.
JINASYS (5,630 포인트) 님이 2013년 3월 8일 답변
0 추천
http://crashj.egloos.com/3694659

이거랑 어레이나 배열을 같이 섞어서 쓰시면 코드가 저것보다 간결해질거같네요
건방진프로그래머 (26,630 포인트) 님이 2013년 3월 8일 답변
0 추천

방법은 여러가지가 있을거 같은데요
저게 Activity에서 모두 처리 하는거라면
저는 커스텀 뷰를 하나 만들거 같습니다.
Activity에서는 
각 타입에 맞게 레이아웃을 관리해주는 뷰를요
그럼 Activity에서는 커스텀 뷰에 어떤레이아웃 타입을 쓸건지와 데이터만 set 해주면 그 타입에 맞게 커스텀 뷰에서 레이아웃을 설정가능하게요

그리고 커스텀뷰에서는 최소한의 뷰만 설정해서 그 타입에 맞게 레이아웃을 바꿔주는 구조로 할거 같습니다.
이미지 뷰에서 같은 이미지를 사용하는데 타입이 바뀌는 경우에 따라 이미지 뷰를 생성하는건.... 이때는 한개만 보여지고 나머지 5개는 숨겨진 상태인데 말이죠 ㅎㅎ;;
타입이 늘어나면 이미지 뷰 개수는 더 늘어날 거구요
그럼 숨겨진 뷰들은 더 많이 생길테고 메모리도 많이 차지 할거구요

제가 이해한게 맞는지 모르겠네요 ㅎㅎ;;

그리고 리소스 아이디를 배열로 받아오시고 싶으시면
arrays.xml 파일에 int로 array값을 만드셔서 
리소스를 가져 오시면 될거 같습니다.
    <integer-array name="search_type">
        <item>@id/BT_Icon_1</item>
        <item>@id/BT_Icon_2</item>
    </integer-array>


int[] ids = getResources().getIntArray(R.array.search_type)
for(int id : ids){
(LinearLayout)convertView.findViewById(id);
}

jelly (1,630 포인트) 님이 2013년 3월 8일 답변
jelly님이 2013년 3월 8일 수정
...