listview 최적화 몇 가지 쓰기

인터넷 에서 봤 는데 너무 좋아 서 소장 하고 있어 요.원래 주소:http://www.cnblogs.com/xilinch/archive/2012/11/08/2760233.html
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>

좋은 웹페이지 즐겨찾기