我Adapter
的自定义ListView
包含Layout
中每个项目的ListView
个Layout
。 getitemType
的选择取决于Layout
选择 View getView(final int position, View convertView, ViewGroup parent)
{
case TYPE_MENUUPLOAD:
case TYPE_UPLOADIMAGE:
ViewHolder holder4 = null;
if (convertView == null)
{
holder4 = new ViewHolder();
convertView=Inflater.inflate(R.layout.uploadphoto,null);
convertView.setTag(holder4);
} else
{
holder4 = (ViewHolder)convertView.getTag();
}
return convertView;
case TYPE_USER:
ViewHolder holder5 = null;
if (convertView == null)
{
holder5 = new ViewHolder();
convertView = Inflater.inflate(R.layout.user, null);
convertView.setTag(holder5);
} else
{
holder5 = (ViewHolder)convertView.getTag();
}
return convertView;
case TYPE_UPLOADVIDEO:
ViewHolder holder6 = null;
if (convertView == null)
{
holder6 = new ViewHolder();
convertView = mInflater.inflate(R.layout.uploadvideo, null);
convertView.setTag(holder6);
}
else
{
holder6 = (ViewHolder)convertView.getTag();
}return convertView;
};
文件。但是当我滚动项目时,占据屏幕的前三项会重复,直到我的列表大小,但位置值会发生变化。
{{1}}
答案 0 :(得分:1)
public int getViewTypeCount() {
return 3; //in your case.
}
public int getItemViewType (int position) {
case TYPE_MENUUPLOAD:
case TYPE_UPLOADIMAGE:
return 0;
case TYPE_USER:
return 1;
case TYPE_UPLOADVIDEO:
return 2;
}
您现有的getView方法应该无需任何更改即可运行。
答案 1 :(得分:0)
在您的情况下,您需要删除if (convertView == null)
支票。因为它导致了问题。
case TYPE_MENUUPLOAD:
case TYPE_UPLOADIMAGE:
你的视图膨胀...所以当case TYPE_USER:
到来时,你对convertView
的{{1}}进行空检查,因为它是其他的{ null
,所以你看错了。
只需使用您的代码
case
在您的情况下, View getView(final int position, View convertView, ViewGroup parent)
{
case TYPE_MENUUPLOAD:
case TYPE_UPLOADIMAGE:
return Inflater.inflate(R.layout.uploadphoto,null);;
case TYPE_USER:
return Inflater.inflate(R.layout.user, null);;
case TYPE_UPLOADVIDEO:
return mInflater.inflate(R.layout.uploadvideo, null);;
}
模式将不会被使用。
修改强> 我想到了普拉卡什建议的另一种解决方案。但他的解决方案将以这种方式发挥作用,如果它确实......
View Holder