2014-11-12 2 views
0

Я использую ViewHolder шаблон для быстрой прокрутки без удачи Heres моего кода до сих пор:ViewHolder шаблон с несколькими макетами

public View getView(int position, View convertView, ViewGroup parent) { 
    View rowView = convertView; 
    ListItem item = getItem(position); 

    if(rowView == null) { 
     LayoutInflater inflater = activity.getLayoutInflater(); 

     ViewHolder viewHolder = new ViewHolder(); 

     if(item.isSectionHeader()) { 
      rowView = inflater.inflate(R.layout.section_header, null); 
      viewHolder.header = (TextView)rowView.findViewById(R.id.section_header); 
     } else { 
      rowView = inflater.inflate(R.layout.list_row_coupon, null); 
      viewHolder.image = (NetworkImageView)rowView.findViewById(R.id.thumbnail); 
     } 

     rowView.setTag(viewHolder); 

    } 

    ViewHolder holder = (ViewHolder) rowView.getTag(); 

    if (imageLoader == null) 
     imageLoader = ApplicationController.getInstance().getImageLoader(); 
    holder.image.setImageUrl(cell.getThumbnailUrl(), imageLoader); 
    holder.header.setText(cell.getShortDescription()); 

    return rowView; 

} 

, но он выходит из строя один и тот же код без если условий его рабочих каких-либо идеи?

11-12 13:30:21.500: E/AndroidRuntime(18745): FATAL EXCEPTION: main 
11-12 13:30:21.500: E/AndroidRuntime(18745): Process: com, PID: 18745 
11-12 13:30:21.500: E/AndroidRuntime(18745): java.lang.NullPointerException 
11-12 13:30:21.500: E/AndroidRuntime(18745): at ListAdapter.getView(ListAdapter.java:128) 
11-12 13:30:21.500: E/AndroidRuntime(18745): at android.widget.AbsListView.obtainView(AbsListView.java:2255) 
11-12 13:30:21.500: E/AndroidRuntime(18745): at android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 
11-12 13:30:21.500: E/AndroidRuntime(18745): at android.widget.ListView.onMeasure(ListView.java:1175) 
11-12 13:30:21.500: E/AndroidRuntime(18745): at android.view.View.measure(View.java:16497) 

Heres некоторая часть моего LogCat

+0

Опубликуйте LogCat тогда ..... –

ответ

0

в convertView только один раз нуль. Таким образом, ваш ViewHolder будет инициализирован один раз item.isSectionHeader() или другим случаем, делая одно между TextView и ImageView всегда равным нулю. Теперь вы должны возможность:

  • Initialize как ImageView и TextView когда convertView имеет нулевое значение, проверка типа впоследствии, и скрывается бывший или последний в зависимости от состояния
  • или, вы можете переопределить getViewTypeCount и getItemViewType, чтобы получить больше на один нуль convertView
0

проблема здесь

if (imageLoader == null) 
     imageLoader = ApplicationController.getInstance().getImageLoader(); 
    holder.image.setImageUrl(cell.getThumbnailUrl(), imageLoader); 
    holder.header.setText(cell.getShortDescription()); 

Вы не знаете, для какой позиции называется getView. Ваше изображение будет только инициализировано, если элемент не является заголовком раздела. Поэтому вам нужно поставить чек, прежде чем устанавливать что-либо на изображении. Если элемент заголовок раздела не использует imageView.

+0

я уже попробовать, что не повезло – sger

+0

сообщения обновленного кода. – Hardik4560

0

Проблема заключается вы инициализации viewHolder.header только если условие item.isSectionHeader() является true и viewHolder.image только если условие item.isSectionHeader() является false.

Но при настройке изображения и настройке текста вы не проверяете состояние.

Просто добавьте условие, как показано ниже.

if(item.isSectionHeader()) { 
    holder.header.setText(cell.getShortDescription()); 
} else { 
    holder.image.setImageUrl(cell.getThumbnailUrl(), imageLoader); 
}  
Смежные вопросы