2016-11-05 20 views
0

ビュータイプがvTypeItemの場合、配列リストからすべての項目を返す必要がありますが、最初の項目を除くすべての項目が返されます。リストビューでは、あなたはgetCount()方法でheaderビューを占めていないようArrayAdapter getViewは最初の項目を返しません

public class DrawerAdapter extends ArrayAdapter<DrawerCustomList> { 

private static final int vTypeHeader = 0; 
private static final int vTypeItem = 1; 
ArrayList<DrawerCustomList> mList = new ArrayList<>(); 

public DrawerAdapter(Context context, ArrayList<DrawerCustomList> list) { 
    super(context,0,list); 
    mList = list; 
} 

@Override 
public int getItemViewType(int position) { 
    return (position==0)?vTypeHeader:vTypeItem; 
} 

@Override 
public int getViewTypeCount() { 
    return 2; 
} 

@Override 
public int getCount() { 
    return mList.size(); 
} 

@NonNull 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    int type = getItemViewType(position); 
    View v = convertView; 
    MyViewHolder mViewHolder = null; 
    if (v==null){ 
     if(type==vTypeItem){ 
      v = LayoutInflater.from(getContext()).inflate(R.layout.drawer_single_item,parent,false); 
      mViewHolder= new MyViewHolder(v,type); 
      DrawerCustomList val = mList.get(position); 
      mViewHolder.itemImage.setImageResource(val.getmListImage()); 
      mViewHolder.itemName.setText(val.getmListName()); 
     }else { 
      v = LayoutInflater.from(getContext()).inflate(R.layout.drawer_header_layout,parent,false); 
      mViewHolder= new MyViewHolder(v,type); 
     } 
    } 
    v.setTag(mViewHolder); 
    return v; 
} 

public static class MyViewHolder{ 

    TextView itemName,headerName,headerEmail; 
    CircleImageView headerPicture; 
    ImageView itemImage; 

    public MyViewHolder(View v,int type){ 
     if(type==vTypeHeader){ 
      headerName = (TextView)v.findViewById(R.id.drawerHeaderName); 
      headerEmail = (TextView)v.findViewById(R.id.drawerHeaderEmail); 
      headerPicture = (CircleImageView)v.findViewById(R.id.drawerCircleImageView); 
     }else { 
      itemName = (TextView) v.findViewById(R.id.drawerItemName); 
      itemImage = (ImageView)v.findViewById(R.id.drawerItemImage); 
     } 
    } 
} 

}

答えて

0

最初のものはそうです。

まず変化に後者:

@Override 
public int getCount() { 
    return mList.size() + 1; // accounting for the header 
} 

今すぐあなたのgetView()方法の現在のバージョンでは、position == 0場合は、正しいheaderを表示するだろうことを覚えておいてください。しかしposition == 1場合は、代わりに何が必要である最初のもの、の、mList.get(position)が実際に(インデックス1)リスト内の2番目のアイテムを取得する方法

.... 
if(type==vTypeItem){ 
     v = LayoutInflater.from(getContext()).inflate(R.layout.drawer_single_item,parent,false); 
     mViewHolder= new MyViewHolder(v,type); 
     DrawerCustomList val = mList.get(position); 

お知らせをします。したがって、この行を...mList.get(position - 1)に変更し、問題を解決する必要があります。

+0

これを行う:return mList.size()+ 1;バインドされた例外を出して、位置を== 1してもリストの最初の項目を取得できませんでした – Nsnik

+0

うん、 'getView()'の中では常に 'mList.get(position - 1 ) 'オーバーフローしてはいけません。正確な例外を貼り付けて、それを追跡できるかどうかを確認しますか? – Vesko

関連する問題