listview 최적화 몇 가지 쓰기
listview A view that shows items in a vertically scrolling list 。수직 스크롤 하위 항목 을 표시 하 는 목록 보기 안 드 로 이 드 개발 에 서 는 listview 를 사용 하 는 곳 이 많 습 니 다. 이 를 통 해 데 이 터 를 보 여 주 며 수직 으로 보 입 니 다.listview 를 사용 하 는 것 은 표준 어댑터 모드 입 니 다. 데이터 -, 인터페이스 - xml 및 어댑터 - adapter 를 사용 하여 데 이 터 는 어댑터 가 필요 한 방식 으로 보 여 줍 니 다. xml 는 데이터 가 어떻게 표현 되 는 지, activity 에서 이러한 활동 을 제어 하 는 지 묘사 합 니 다. 그 중에서 사용자 정의 adapter 를 사용 하면 getView 방법 을 다시 쓰 고 getView 방법 에서 사용자 item 에 대한 보기 와 데 이 터 를 만 듭 니 다.
여기에 최적화 된 부분 이 있 습 니 다. 바로 view 를 다시 사용 하여 메모리 소 모 를 줄 이 고 item 로드 속 도 를 가속 화 하 는 것 입 니 다. getView 에서 최 적 화 된 부분 은 모두 비상 상황 일 것 입 니 다. 다음은 제 가 세 가지 최 적 화 된 문법 을 총 결 했 습 니 다. 여러분 의 지적 을 바 랍 니 다.
첫째:
convertView 를 다시 사용 하여 메모리 소 모 를 어느 정도 줄 였 습 니 다.convertView 가 null 인지 아 닌 지 를 판단 하려 면 하나의 보 기 를 만들어 서 이 보기 데 이 터 를 주 고 마지막 으로 이 보 기 를 바 텀 으로 되 돌려 사용자 에 게 제공 해 야 합 니 다. 특징: 현재 convertView 가 null 이면 LayoutInflat 를 통 해 view 를 생 성 합 니 다.
<span style="font-family:Microsoft YaHei;">public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = LayoutInflater.from(context).inflate(R.layout.section_list_item1, null);
}
TextView tv_name = (TextView)convertView.findViewById(R.id.contact_contactinfoitem_tv_name);
TextView tv_phone = (TextView)convertView.findViewById(R.id.contact_contactinfoitem_tv_phoneNum);
ContactInfo1 confo = contacts.get(position);
if (confo != null) {//to set every item's text
tv_name.setText(confo.getContactName());
tv_phone.setText(confo.getContact_Phone());
}
return convertView;
}</span>
두 번 째:
위의 작성 법 은 getVIEw 에 있 을 때마다 findViewById 를 다시 찾 아 컨트롤 의 할당 과 이벤트 설정 을 해 야 한 다 는 단점 이 있 습 니 다.이렇게 하면 반복 되 는 일 을 하고 있 습 니 다. geiview 에 이러한 컨트롤 이 포함 되 어 있 기 때 문 입 니 다. 그리고 이 컨트롤 들 의 id 는 똑 같 습 니 다. 즉, view 에서 findViewById 를 한 번 만 하면 뒤에 매번 findViewById 를 필요 로 하지 않 습 니 다. 다음은 두 번 째 표기 법 을 드 리 겠 습 니 다. 쓰기 의 특징 은 보통 내부 클래스 인 class ViewHolder 가 있 습 니 다. 이 ViewHolder 는 view 의 일부 컨트롤 을 표시 하고 이벤트 에 해당 하 는 설정 을 편리 하 게 할 수 있 습 니 다. 예 를 들 어 onClick 등 은 매번 findViewById 를 사용 하지 않 아 도 되 고 성능 의 소 모 를 줄 일 수 있 습 니 다.동시에 convertView 를 다시 사용 하여 메모리 소 모 를 어느 정도 줄 였 습 니 다.
<span style="font-family:Microsoft YaHei;">public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder ;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.section_list_item1, null);
holder = new ViewHolder();
holder.tv_name = (TextView)convertView.findViewById(R.id.contact_contactinfoitem_tv_name);
holder.tv_phone = (TextView)convertView.findViewById(R.id.contact_contactinfoitem_tv_phoneNum);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder)convertView.getTag();
}
ContactInfo1 confo = contacts.get(position);
Log.i("my", "confo "+confo.getContactName());
if (confo != null) {//to set every item's text
holder.tv_name.setText(confo.getContactName());
holder.tv_phone.setText(confo.getContact_Phone());
}
return convertView;
}
class ViewHolder
{
TextView tv_name,tv_phone;
}</span>
세 번 째:
개인 적 으로 이 글 씨 를 쓰 는 것 이 가장 편안 하 다 고 생각 합 니 다. 가장 편안 하 다 는 뜻 은 코드 를 보면 서 시원 하고 선명 하 게 보 인 다 는 것 입 니 다. 내부 클래스 클 라 스 뷰 홀 더 를 사용 하고 convertView 를 다시 사용 한 것 이 특징 입 니 다. 두 번 째 표기 법 은 임시 변수 View view = convertView 를 사용 한 다음 view 를 수정 하고 view 를 되 돌려 주 는 것 입 니 다.
<span style="font-family:Microsoft YaHei;">@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
ViewHolder holder ;
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.section_list_item1, null);
holder = new ViewHolder();
holder.tv_name = (TextView)view.findViewById(R.id.contact_contactinfoitem_tv_name);
holder.tv_phone = (TextView)view.findViewById(R.id.contact_contactinfoitem_tv_phoneNum);
view.setTag(holder);
}
else
{
holder = (ViewHolder)view.getTag();
}
ContactInfo1 confo = contacts.get(position);
Log.i("my", "confo "+confo.getContactName());
if (confo != null) {//to set every item's text
holder.tv_name.setText(confo.getContactName());
holder.tv_phone.setText(confo.getContact_Phone());
}
return view;
}
class ViewHolder
{
TextView tv_name,tv_phone;
}</span>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
거품 정렬 최적화 알고리즘 (자바)기본 적 이 고 질서 있 는 데이터 에 대해 최 적 화 된 거품 정렬 을 사용 하 는 것 이 가장 좋 은 선택 이다. 그 는 데이터 가 질서 가 있 는 것 을 발견 한 후에 정렬 을 끝 낼 것 이다. 코드 는 다음 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.