为什么我的Viewholder不起作用?

时间:2015-01-06 02:59:15

标签: nullpointerexception

所以我正在创建一个List,我使用自己的数组适配器实现。我还使用了一个视图来提高性能。但由于某种原因,我在这一行得到了一个nullpointer异常:

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>

1 个答案:

答案 0 :(得分:0)

K所以似乎下一行: holder.icon=(ImageView) convertView.findViewById(R.id.icon); 应改为 holder.icon=(ImageView) convertView.findViewById(R.id.imageView); 因为这是ImageView在xml文件中的id