1

のアイテムごとに異なるカスタムAdapterがあります。の選択はファイルの選択に依存しますが、スクロールすると画面を占める最初の3つのアイテムがリストサイズまで繰り返されますが、位置の値が変更されます。ListViewLayoutListViewLayoutgetitemTypeLayout

     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;

    };
4

2 に答える 2

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メソッドは変更なしで機能するはずです。

于 2012-07-20T06:23:54.633 に答える
0

あなたの場合、if (convertView == null)チェックを削除する必要があります。それが問題を引き起こしているので。

case TYPE_MENUUPLOAD: case TYPE_UPLOADIMAGE:あなたのビューを膨らませるために...だから、それが他の中で初期化されてcase TYPE_USER:いるのconvertViewではないので、あなたは間違ったビューを持っています。nullcase

コードコードを次のように使用するだけです

  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あなたの場合、パターンは完全には使用されません。

編集: Prakash によって提案された別の解決策を考えています。しかし、彼の解決策は、この方法でトリックを行います.

View getView(final int position, View convertView, ViewGroup parent)
{
 ViewHolder holder = null;
 if (convertView == null) {
  case TYPE_MENUUPLOAD:
  case TYPE_UPLOADIMAGE:
        holder = new ViewHolder();
        convertView=Inflater.inflate(R.layout.uploadphoto,null);
        convertView.setTag(holder);
    break;
case TYPE_USER:
       holder = new ViewHolder();  
       convertView = Inflater.inflate(R.layout.user, null);
       convertView.setTag(holder); 
    break;
  case TYPE_UPLOADVIDEO:            
       holder = new ViewHolder();  
       convertView = mInflater.inflate(R.layout.uploadvideo, null);
       convertView.setTag(holder); 
    break;    
 } 
 else 
 {
    holder = (ViewHolder)convertView.getTag();
 }return convertView;

};
于 2012-07-20T06:00:44.177 に答える