2014-01-14 2 views
0

사용자 지정 어댑터와 함께 사용하는 사용자 지정 listview가 있습니다. 앱이 처음 열리면 처음 몇 개의 항목이 올바르게 표시됩니다. 나는 아래로 스크롤하기 시작할 때, 나는의 getView() 메소드에서 NullPointerException이 얻을 :스크롤 할 때 사용자 지정 ListView getView() 메서드 nullPointerException

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    ListViewItem item = items.get(position); 

    View vi = convertView; 

    if (item.Type.equals("Homework")) { 

     if (convertView == null) 
      vi = inflater.inflate(R.layout.item_row_homework, null); 

     ImageView imgThumbnail = (ImageView) vi 
       .findViewById(R.id.homework_imgThumbnail); 
     TextView txtTitle = (TextView) vi 
       .findViewById(R.id.homework_txtTitle); 
     TextView txtSubTitle = (TextView) vi 
       .findViewById(R.id.homework_txtSubTitle); 

     imgThumbnail.setImageResource(item.ThumbnailResource); 
     txtTitle.setText(item.Title); 
     txtSubTitle.setText(item.SubTitle); 
    } 
    if (item.Type.equals("Study")) { 

     if (convertView == null) 
      vi = inflater.inflate(R.layout.item_row_study, null); 

     ImageView imgThumbnail = (ImageView) vi 
       .findViewById(R.id.study_imgThumbnail); 
     TextView txtTitle = (TextView) vi 
       .findViewById(R.id.study_txtTitle); 
     TextView txtSubTitle = (TextView) vi 
       .findViewById(R.id.study_txtSubTitle); 

     imgThumbnail.setImageResource(item.ThumbnailResource); 
     txtTitle.setText(item.Title); 
     txtSubTitle.setText(item.SubTitle); 
    } 
    if (item.Type.equals("Project")) { 

     if (convertView == null) 
      vi = inflater.inflate(R.layout.item_row_project, null); 

     ImageView imgThumbnail = (ImageView) vi 
       .findViewById(R.id.project_imgThumbnail); 
     TextView txtTitle = (TextView) vi 
       .findViewById(R.id.project_txtTitle); 
     TextView txtSubTitle = (TextView) vi 
       .findViewById(R.id.project_txtSubTitle); 

     imgThumbnail.setImageResource(item.ThumbnailResource); 
     txtTitle.setText(item.Title); 
     txtSubTitle.setText(item.SubTitle); 
    } 

    return vi; 
} 

그리고 내가 살펴 보았다

imgThumbnail.setImageResource(item.ThumbnailResource); 

라인의 세 가지 경우 중 하나에 온다 이것에 대한 다른 질문이 있지만 정확히 무슨 일이 일어나는지 이해하지 못했습니다.

감사합니다.

+0

'R.id.homework_imgThumbnail' 및'R.id.study_imgThumbnail' 및'R.id.project_imgThumbnail'에 대한 findViewById가 null을 반환하지 않는 것을 다시 확인 했습니까? – rbarriuso

+0

귀하의 logcat을 게시하십시오. NPE가 있다고 logcat이 알려준 줄을 확인하십시오. –

+0

@epsilondelta 질문에 대한 답변을 구할 수 있습니까? – rbarriuso

답변

0

잘못된 유형의보기를 다시 사용하려고합니다.

당신은 당신이 R.layout.item_row_homework 레이아웃, 말,로 만든 convertView를받을 수 아래로 스크롤 할 때,하지만 당신은 position에 그릴 수있는 항목은 다른 유형, 말, "Project"에 해당합니다.

View.setTag 메서드를 사용하여 뷰 유형 정보를 전달하고 다시 사용하기 전에 확인하십시오. 유형이 다른 경우 새로운보기를 부 풀릴 필요가있을 것입니다.

사용자 지정 어댑터를 사용하는 한 더 나은 방법은 getItemViewType(int position)getViewTypeCount() 메서드를 재정 의하여 지원되는 여러보기 유형을 정의하는 것입니다.

관련 문제