java.lang.IllegalArgumentException:Can';没有viewTypeCount<;1.
我得到了这个错误:java.lang.IllegalArgumentException:Can';没有viewTypeCount<;1.,java,android,Java,Android,我得到了这个错误: java.lang.IllegalArgumentException: Can't have a viewTypeCount < 1 java.lang.IllegalArgumentException:不能具有小于1的viewTypeCount 我很确定我确切地知道是什么导致了它,但我不知道如何修复它 我的应用从数据库中加载一个用户好友。当用户在列表视图中至少有一个朋友时,就可以了。当用户是全新用户且没有朋友时,应用程序会崩溃,因为listview的计数为0 这仅
java.lang.IllegalArgumentException: Can't have a viewTypeCount < 1
java.lang.IllegalArgumentException:不能具有小于1的viewTypeCount
我很确定我确切地知道是什么导致了它,但我不知道如何修复它
我的应用从数据库中加载一个用户好友。当用户在列表视图中至少有一个朋友时,就可以了。当用户是全新用户且没有朋友时,应用程序会崩溃,因为listview的计数为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;
}
}
公共类MyAdapter扩展了ArrayAdapter{
语境;
智力资源ID;
充气机;
私有上下文;
@凌驾
public int getViewTypeCount(){
返回getCount();
}
@凌驾
public int getItemViewType(int位置){
返回位置;
}
数组列表项;
公共MyAdapter(上下文上下文、int resourceId、ArrayList项)
{
超级(上下文、资源ID、项目);
mContext=上下文;
这个项目=项目;
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
convertView=充气机。充气(R.layout.list_项,空);
holder=新的ViewHolder();
holder.fbphoto=(ImageView)convertView.findViewById(R.id.fbphoto);
holder.name=(TextView)convertView.findViewById(R.id.name);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
final HashMap item=(HashMap)items.get(position);
如果(项!=null)
{
字符串facebookProfilePicUrl=”https://graph.facebook.com/“+item.get(TAG_facebook id)+”/picture?宽度=150,高度=150”;
毕加索(McContext)
.load(facebookProfilePicUrl)
.占位符(R.可绘制.无图像)
.into(holder.fbphoto);
holder.name.setText(item.get(TAG_USERNAME));
}
返回视图;
}
公共类视图持有者
{
ImageView fbphoto;
文本视图名称;
}
}
我想你没有抓住ViewTypeCount的重点。您应该返回列表中不同视图类型的数量。
这对于循环列表中的视图很重要
您有两种类型的列表项,一种是白色背景,另一种是黑色背景。当您返回2作为ViewTypeCount时,Listview知道ok,有2种类型的Listitems,并且不会在getView循环中混淆它们
所以只要使用:
public int getViewTypeCount() {
return 1;
}
或者根本不重写该方法。getViewTypeCount返回此适配器可以返回的不同类型视图的数量。因为您只返回一种类型的视图,所以应该只返回1。使用此选项
@Override
public int getViewTypeCount() {
if(getCount() > 0){
return getCount();
}else{
return super.getViewTypeCount();
}
}getViewTypeCount()
应返回您拥有的视图类型数,而不是行数。您的getView()
实现只返回一种类型的视图,因此getViewTypeCount()
应该返回1
。阅读更多关于ListAdapter
视图类型的信息。我误读了“当用户是全新的并且还没有朋友时,应用程序会崩溃,因为listview的计数为0。这仅仅是一个错误处理的情况吗?”并且一开始给出了错误的答案。在链接中有3个不同的视图,因此getViewTypeCount返回3。当列表为空时,可以显示空视图