3

У меня есть вложенный массив для отображения в моем списке. Каждая строка ListView будет иметь горизонтальный LinerLayout в HorizontalScrollView.Динамическое добавление просмотров каждой строки списка

В настоящее время я использую шаблон ViewHolder и динамически добавляю виды в LinerLayout в методе getView ListView.

Проблема является ListView лаги, когда я прокруткой ..

Это мой пользовательский класс адаптер

public class ChannelArrayAdapter extends ArrayAdapter<Kanal> { 
Context context; 
List<Kanal> list; 
List<Program> pList; 
LayoutInflater inflator; 

public ChannelArrayAdapter(Context context, List<Kanal> lis) { 
    super(context, R.layout.channels, lis); 
    // TODO Auto-generated constructor stub 
    this.list = lis; 
    this.context = context; 
} 

static class ViewHolder { 
    ImageView imageView; 
    LinearLayout l; 
} 

static class ProgramHolder { 
    TextView programAdi; 
    TextView programSaati; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder viewHolder = null; 
    if (convertView == null) { 
     inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflator.inflate(R.layout.channels, parent, false); 
     viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView1); 
     viewHolder.l = (LinearLayout) convertView.findViewById(R.id.yayinAkisiLayout); 
     convertView.setTag(viewHolder); 

    } else { 
     viewHolder = (ViewHolder)convertView.getTag(); 
     viewHolder.l.removeAllViews(); 
    } 

    final Kanal kanal = list.get(position); 
    pList = kanal.getKanalProgramListesi(); 
    viewHolder.imageView.setImageResource(kanal.getResourcesIkonKanal()); 

    for (Program p : pList) { 
     View v = new View(context); 
     v.setId(position); 
     ProgramHolder pHolder = new ProgramHolder(); 
     v = inflator.inflate(R.layout.programs, null);   
     pHolder.programSaati = (TextView) v.findViewById(R.id.psaati); 
     pHolder.programAdi = (TextView)v.findViewById(R.id.pname); 
     pHolder.programAdi.setText(p.getProgramAdi()); 
     pHolder.programSaati.setText(p.getProgramBaslangic()); 
     v.setTag(pHolder); 
     viewHolder.l.addView(v); 
    } 

    return convertView; 
} 

} 
+0

Я устал от вашего кода для одной из моих реализаций, и он отлично работал. не видел много отставания, хотя. –

ответ

0

держатель Сделать статический класс и просто редактировать свои поля в GetView. Ваш просмотр списка задерживается, потому что вы создаете несколько новых объектов каждый раз, когда getView вызывается -> каждый раз, когда новый элемент загружается или набирается видимость в вашем ListView.

http://www.youtube.com/watch?v=wDBM6wVEO70

Это объясняет все в деталях, как сделать эффективный адаптер/ListView.

0

Вы можете оптимизировать этот кусок кода:

ProgramHolder pHolder = new ProgramHolder(); 
     v = inflator.inflate(R.layout.programs, null);   
     pHolder.programSaati = (TextView) v.findViewById(R.id.psaati); 
     pHolder.programAdi = (TextView)v.findViewById(R.id.pname); 
     pHolder.programAdi.setText(p.getProgramAdi()); 
     pHolder.programSaati.setText(p.getProgramBaslangic()); 
     v.setTag(pHolder); 
     viewHolder.l.addView(v); 

Как View Holder шаблон, вы должны хранить эти раскладку, может быть, в статической переменной тоже:

static ProgramHolder pHolder; 

if (pHolder == null) { 
    View v = new View(context); 
    v = inflator.inflate(R.layout.programs, null);   
    pHolder.programSaati = (TextView) v.findViewById(R.id.psaati); 
    pHolder.programAdi = (TextView)v.findViewById(R.id.pname); 
} 

Основной целью здесь является снижение раз использовать findViewById(). после этого в цикле вы можете создать собственное представление и назначить каждую базу полей на pHolder.

Надеюсь, эта помощь :)

+0

Спасибо за ответ. Я пробовал, но это не имело никакого значения. – ibrahimgunes

+0

вы можете сказать мне размер plist? – hqt

+0

Существует динамический набор массива из json-ответа, но список насчитывает список 25, и каждый узел Kanal имеет объект программы 20-30. – ibrahimgunes

Смежные вопросы