如何获取自定义适配器列表视图中的所有项目?

时间:2012-07-20 04:46:10

标签: android android-listview

Adapter的自定义ListView包含Layout中每个项目的ListViewLayoutgetitemType的选择取决于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}}

2 个答案:

答案 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