java.lang.IllegalArgumentException:不能有viewTypeCount< 1

时间:2014-07-20 20:59:06

标签: java android

我收到此错误:

java.lang.IllegalArgumentException: Can't have a viewTypeCount < 1

我很确定我确切知道导致它的原因,但我不知道如何修复它。

我的应用从数据库加载用户好友。当用户至少有一个朋友放入列表视图时,没问题。当用户是全新的并且还没有朋友时,应用程序崩溃,因为列表视图的计数为0.

这只是一个错误处理的案例吗?

如果我没有发布所有必要的相关代码,请告诉我们!

这是我的适配器:

public class MyAdapter extends ArrayAdapter<HashMap<String, String>> {

    Context context;
    int resourceId;
    LayoutInflater inflater;
    private Context mContext;

    @Override

    public int getViewTypeCount() {                 

        return getCount();
    }

    @Override
    public int getItemViewType(int position) {

        return position;
    }


    ArrayList<HashMap<String, String>>  items;
    public MyAdapter (Context context, int resourceId, ArrayList<HashMap<String, String>> items)
    {
        super(context, resourceId, items);
        mContext = context;
        this.items =items;
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        final ViewHolder holder;
        if (convertView == null){

            convertView = inflater.inflate(R.layout.list_item, null);

            holder = new ViewHolder();
            holder.fbphoto = (ImageView)convertView.findViewById(R.id.fbphoto);
            holder.name = (TextView)convertView.findViewById(R.id.name);

   convertView.setTag(holder);

        } else {

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



        final HashMap<String,String> item = (HashMap<String,String> ) items.get(position);
        if (item != null)
        {

            String facebookProfilePicUrl = "https://graph.facebook.com/"+item.get(TAG_FACEBOOKID)+"/picture?width=150&height=150";

            Picasso.with(mContext)
            .load(facebookProfilePicUrl)
            .placeholder(R.drawable.no_image)
            .into(holder.fbphoto);

holder.name.setText(item.get(TAG_USERNAME));

 }

        return convertView;
    }

    public class ViewHolder
    {
        ImageView fbphoto;
        TextView    name;

    }
}

4 个答案:

答案 0 :(得分:22)

我认为你错过了ViewTypeCount的观点。您应该在列表中返回不同视图类型的数量。 这对于回收列表中的视图非常重要。

成像您有2种类型的Listitems,一种具有白色背景,另一种具有黑色背景。当您返回2作为ViewTypeCount时ListView知道没问题,有两种类型的Listitems,并且不会在getView视图回收中混淆它们。

所以只需使用:

   public int getViewTypeCount() {                 
        return 1;
    }

或根本不重写该方法。

答案 1 :(得分:3)

getViewTypeCount返回此适配器可以返回的不同类型视图的数量。由于您只返回一种类型的视图,因此应该返回1.

答案 2 :(得分:3)

使用此

@Override
public int getViewTypeCount() {
    if(getCount() > 0){
        return getCount();
    }else{
        return super.getViewTypeCount();
    }

}

答案 3 :(得分:0)

在您的 Adapter 类中更改此函数:

@Override
public int getViewTypeCount() {
   return getCount();
}

到:

public int getViewTypeCount() {
   if(getCount()<1) return 1;
   return getCount();
}

**注意:避免@Override