2015-01-06 70 views
0

所以我創建了一個列表,我正在使用我自己的陣列適配器實現。我也使用視圖的性能。但由於某種原因,我在這條線上得到一個空指針例外:爲什麼我的Viewholder不工作?

holder.icon.setImageResource(R.drawable.no); 

所以我想我的持有人沒有初始化?但我不知道我的代碼應該如何呢?

public class NameViewAdapter extends ArrayAdapter<String>{ 

private String[] names; 
private static class ViewHolder{ 
    ImageView icon=null; 

} 

public NameViewAdapter(Context context, int textViewResourceId,String[] names) { 
    super(context, textViewResourceId, names); 
    this.names = names; 

} 

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

    ViewHolder holder; 

    if(convertView==null) 
    { 
     LayoutInflater li = 
       (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = li.inflate(R.layout.row,parent,false); 

     holder=new ViewHolder(); 
     holder.icon=(ImageView) convertView.findViewById(R.id.icon); 
     convertView.setTag(holder); 
    } 

    else 
    { 
     holder = (ViewHolder) convertView.getTag(); 
    } 


     if (names[position].length() > 4) 
      holder.icon.setImageResource(R.drawable.ok); 
     else 
      holder.icon.setImageResource(R.drawable.no); 

    return convertView; 
} 

}

這是我的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView" 
     android:src="@drawable/ic_launcher"/> 
    <TextView 
     android:id="@+id/label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 


</LinearLayout> 

回答

0

ķ所以它似乎是下一行: holder.icon=(ImageView) convertView.findViewById(R.id.icon); 應改爲 holder.icon=(ImageView) convertView.findViewById(R.id.imageView); 原因是這樣的ID的ImageView在xml文件中有