Android -- Adapter 깊이 이해 및 ListView 최적화
이전 글 은 주로 안 드 로 이 드 에서 Adapter 의 역할 과 디자인 모델 에서 어댑터 모델 과 의 공통점 을 토론 하고 제시 했다.
Android 에서 Adapter 의 시스템 구조 입 니 다.지난 글 에서 Adapter 는 데이터 소스 와 AdapterView 사이 라 는 것 을 알 게 되 었 지만
교량, AdapterView 와 데이터 소스 '인터페이스' 의 '적합' 을 완성 합 니 다.하지만 Adapter 가 어떻게 일 하 는 지 는 잘 모 르 겠 습 니 다.
따라서 이 글 은 Adapter 의 작업 과정 을 깊이 이해 하고 소 편 도 로봇 초보 다.소감 을 적어 서 다 같이.
공부
Android 의 어댑터 는 다양 합 니 다. AdapterView 도 많 습 니 다. 여기 서 는 ListView 와 BaseAdapter 를 사용 하여 이해 합 니 다.
그 작업 원리.이 를 사용 하 는 것 은 다음 과 같은 몇 가지 고려 를 바탕 으로 하 는 것 이다. 1. ListView 는 개발 에서 많이 사용 되 고 응용 장면 이 매우 광범 위 하 다.
2. 자료 의 조 회 를 통 해 BaseAdapter 가 더욱 변화 하 는 구 조 를 실현 할 수 있 고 ListView 의 최적화 문제 와 관련된다.됐다.
잡담 은 그만 하고 구체 적 인 예 를 보 자!
activity_main.xml
list_item.xml
MainActivity.java package com.example.listview_baseadapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { private ListView listView = null; private List
직접 효과 그림 올 리 기:언급 해 야 할 것 은 상기 코드 의 실현 은 ListView 의 최 적 화 를 고려 하여 ListView 에 대한 최적화 문 제 를 떠 나 는 것 이다.MyAdapter 클래스 중
의 getView () 가 가장 중요 하 다. 여기 도 ListView 효율 에 영향 을 주 는 관건 이다.
getView () 방법 에 대한 처 리 는 보통 세 가지 방식 이 있 습 니 다.
1. 아무런 처리 없 이 이런 방식 은 데이터 양 이 적은 상황 에서 만 사용 할 수 있 기 때문에 이 방식 을 사용 하 는 것 을 권장 하지 않 습 니 다.
public View getView(int position, View convertView, ViewGroup parent) { View item = mInflater.inflate(R.layout.list_item, null); ImageView img = (ImageView)item.findViewById(R.id.img); TextView title = (TextView)item.findViewById(R.id.title); TextView content = (TextView)item.findViewById(R.id.content); img.setImageResource(R.drawable.bgs); title.setText("Coding"); content.setText(" , ~~~"); return item; }
2. 캐 시 converView 최 적 화 를 통 해 캐 시 에 View 가 존재 하지 않 는 다 고 판 단 될 수 있 습 니 다. 있 으 면 캐 시 에 있 는 View 를 이용 합 니 다.
성능 을 향상 시 켰 다.
public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null) { convertView = mInflater.inflate(R.layout.list_item, null); } ImageView img = (ImageView)convertView.findViewById(R.id.img); TextView title = (TextView)convertView.findViewById(R.id.title); TextView content = (TextView)convertView.findViewById(R.id.content); img.setImageResource(R.drawable.bgs); title.setText("Coding"); content.setText(" , ~~~"); return convertView; }
3. 세 번 째 방식 은 상기 코드 가 실 현 된 부분 입 니 다. convertView + ViewHolder 를 통 해 이 루어 지고 ViewHolder 를 사용 합 니 다.이 정적 클래스 의 장점 은 데 이 터 를 표시 하 는 View 를 캐 시 하여 UI 의 응답 속 도 를 가속 화 하 는 것 이다.
convertView = = null 을 판단 할 때 비어 있 으 면 설 계 된 레이아웃 파일 레이아웃 에 따라 convertView 값 을 부여 하지 않 습 니 다.
convertView 의 각 View 컨트롤 을 연결 하기 위해 view Holder 를 만 듭 니 다.convertView 의 setTag 로 view Holder 를
시스템 이 두 번 째 로 ListView 를 그 릴 때 태그 에서 꺼 낼 수 있 도록 태그 에 설정 합 니 다.
따라서 세 번 째 방식 으로 ListView 를 최적화 하 는 것 을 권장 합 니 다! 관련 참고:
http://www.cnblogs.com/over140/archive/2011/03/23/1991100.html
프로그램 전체 소스 코드:
http://download.csdn.net/detail/kiritor/5134811
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
거품 정렬 최적화 알고리즘 (자바)기본 적 이 고 질서 있 는 데이터 에 대해 최 적 화 된 거품 정렬 을 사용 하 는 것 이 가장 좋 은 선택 이다. 그 는 데이터 가 질서 가 있 는 것 을 발견 한 후에 정렬 을 끝 낼 것 이다. 코드 는 다음 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.