-
BaseAdapter를 사용시 유의 사항안드로이드(스튜디오)/막 써 2017. 8. 7. 10:28반응형
1. getView(int position, View convertView, ViewGroup parent) 에서
AdapterView.LayoutParams를 이용하여 아이템 뷰의 크기 설정시
아이템뷰가 AdapterView 하나가 되는 경우가 있음(개발자옵션 - 레이아웃 범위 표시로 보면 뷰 하나로 보임).
└ 아이템 뷰의 최상위 ViewGroup의 크기를 wrap_content로 해놓고
하위 ViewGroup을 하나 더 만들어 그 안에 아이템뷰를 정의하고
아이템 뷰의 최상위 ViewGroup.LayoutParams를 사용하여
만든 하위 ViewGroup의 크기를 설정 해주면 해결.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >
<LinearLayout android:id="@+id/linear_container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" /> </LinearLayout>아이템 뷰에서는 최상위 뷰 아래에 linear_container라는 아이디를 가진 ViewGroup을 만들고
private int itemWidth; private int itemHeight; @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = ((Activity) mContext).getLayoutInflater().inflate(R.layout.item_datepick, null); } LinearLayout linear_container = (LinearLayout) convertView.findViewById(R.id.linear_container); LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(itemWidth, itemHeight); linear_container.setLayoutParams(param); return convertView; }
getView(int position, View convertView, ViewGroup parent) 에서는
만든 ViewGroup을 찾아
아이템뷰의 최상위 ViewGroup에 맞는 LayoutParams를
setLayoutParams(LayoutParams params) 해주면 리스트뷰에서 뷰 하나로 보이는 현상이 사라짐.
2. getView(int position, View convertView, ViewGroup parent) 에서
아이템 뷰의 상태를 조건에 따라 바꿀시 조건에 따른 분기 처리를 꼭 해줄 것.
만약 아이템 뷰에 TextView가 있는데, 이를 짝수 일때 setEnabled(false) 한다고 치면
xml에서 enabled를 true로 해줬다고 코드 상으로 setEnabled(true)를 안해주면
스크롤시 뒤죽박죽 되는 현상을 경험 할 수 있음.
반응형'안드로이드(스튜디오) > 막 써' 카테고리의 다른 글
ExpandableListView 샘플 (0) 2018.03.17 일정 기간 범위 선택하여 작업하는 샘플 (2) 2018.02.12 단순 텍스트 로그용 액티비티 (0) 2017.11.27 태스크에 있는 액티비티 띄우기 (0) 2017.11.27 이클립스 프로젝트 안드로이드 스튜디오로 임포트시 발생 된 오류 (2) 2017.06.07