我收到此错误:
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;
}
}
答案 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