2012-02-08 5 views
2

사용자 지정 BaseAdapter.Every 목록 항목이있는 listView에는 클릭 가능한 단추가 있습니다. 비공개 목록 항목 = new ArrayList();동결을 중지하는 방법 listView

public View getView(final int position, View convertView, ViewGroup parent) { 

     View v = null; 
     try { 
      v = inflater.inflate(R.layout.row, null); 

      TextView name = (TextView)v.findViewById(R.id.textView); 
      name.setText(items.get(position).getName()); 


      imageButton = (ImageButton) v.findViewById(R.id.Button); 
      imageButton.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // do something 
       } 
      }); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return v; 
    } 

내 문제는 내가 목록을 스크롤 할 때 응용 프로그램이 멈추는 것입니다. 어떻게 해결할 수 있습니까?

답변

3

매번 새로운보기를 작성하는 것은 목록보기와 완전히 반대이며보기를 재사용합니다.

에 전달 된 convertView 매개 변수를 View v = null를 제거하고 사용합니다.

public View getView(final int position, View convertView, ViewGroup parent) { 
    if(convertView == null){ 
     convertView = inflater.inflate(R.layout.row, null); 
    } 

    TextView name = (TextView)convertView.findViewById(R.id.textView); 
    name.setText(items.get(position).getName()); 

    imageButton = (ImageButton) convertView.findViewById(R.id.Button); 
    /* NB 
    For efficiency sake see the link in Sparky's answer about itemClickListeners 
    instead of using onClickListeners 
    */ 
    imageButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // do something 
     } 
    }); 

    return convertView; 
} 
+1

이렇게하면 getView()를 호출 할 때마다 새로운 OnClickListener가 생성됩니다. 즉 적어도 모든 행에 대해 새로운 OnClickListener가 생성됩니다. –

+0

아 예, 편집하고 메모 해 두겠습니다. – triggs

+2

ViewHolder 패턴을 사용하여이 문제를 개선 할 수도 있습니다. http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html –