0

У меня есть ящик для навигации, с ListView и с заголовком. Когда я скорблю ящик вверх, элементы смешаны, тип предметов. Зачем?Навигация Просмотр списка ящиков с 2 типа

Мой DrawerAdapter.java:

общественный класс DrawerAdapter расширяет BaseAdapter {

private Context context; 
private List<DrawerItem> navDrawerItems; 
DrawerItemClickListener drawerItemClickListener; 


public DrawerAdapter(Context context, ArrayList<DrawerItem> navDrawerItems,DrawerItemClickListener drawerItemClickListener) { 
    this.context = context; 
    this.navDrawerItems = navDrawerItems; 
    this.drawerItemClickListener = drawerItemClickListener; 
} 

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

@Override 
public Object getItem(int position) { 
    return navDrawerItems.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public boolean isEnabled(int position) { 
    return false; 
} 


static class ViewHolder { 
ImageView imvIcon; 
TextView textView; 
LinearLayout layout; 
} 


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

@Override 
public int getItemViewType(int position) { 
    return super.getItemViewType(position); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 
    final DrawerItem mItem = navDrawerItems.get(position); 

    if(mItem.getType().equals(DrawerItem.TYPE_CLICKABLE)) 
    { 
     if (convertView == null) 
     { 
      holder = new ViewHolder(); 

      LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE); 

      convertView = inflater.inflate(R.layout.drawer_list_item, parent, false); 
      holder.imvIcon = (ImageView) convertView.findViewById(R.id.item_icon); 
      holder.textView = (TextView) convertView.findViewById(R.id.item_text); 
      holder.layout = (LinearLayout) convertView.findViewById(R.id.drawer_one_layout); 

      convertView.setTag(holder); 

     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     if(holder.imvIcon != null) 
      Picasso.with(parent.getContext()).load(mItem.getIcon()).into(holder.imvIcon); 
     if(holder.textView != null) 
      holder.textView.setText(mItem.getTitle()); 

     if(holder.layout != null) 
      holder.layout.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        drawerItemClickListener.DrawerItemClicked(mItem); 
       } 
      }); 

    } 
    else 
    { 

     if (convertView == null) 
     { 
      holder = new ViewHolder(); 

      LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE); 

       convertView = inflater.inflate(R.layout.drawer_list_item_two, parent, false); 
       holder.textView = (TextView) convertView.findViewById(R.id.item_text); 

      convertView.setTag(holder); 

     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

      holder.textView.setText(mItem.getTitle()); 

    } 

    return convertView; 
}} 

И Выдвижной ящик Предмет:

общественного класса DrawerItem {

public final static String TYPE_CLICKABLE = "clikc"; 

public final static String TYPE_HEADER = "header"; 

private String title, type; 
private int icon; 

public DrawerItem(String title, int icon, String type) { 
    this.title = title; 
    this.icon = icon; 
    this.type = type; 

} 

public String getTitle() { 
    return title; 
} 

public int getIcon() { 
    return icon; 
} 

public String getType() {return this.type;}} 

Пожалуйста, помогите мне. Благодарю.

ответ

1

У вас нет четкого указания того, какой тип элемента соответствует вашему текущему виду, поэтому адаптер не знает тип представления и не отображает правильно элементы (например, он их смешивает).

В вашем getItemViewType() вы должны иметь четкое представление о viewtype текущего элемента, и сделать что-то вроде этого:

@Override 
public int getItemViewType(int position) { 
    if(navDrawerItems.get(position).getType().equals(DrawerItem.TYPE_CLICKABLE)) 
     return 0; 
    return 1; 
} 
Смежные вопросы