2013-02-28 3 views
0

Когда я использовал GridView и добавить пользовательский макет в GridView я вижу эту ошибку и мое приложение работает очень медленноПропущенные рамки в android, когда я использовал GridView?

02-28 18:39:59.252: I/Choreographer(5586): Skipped 263 frames! The application may be doing too much work on its main thread. 

Мой код:

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

     View vi1=convertView; 
     if(convertView==null){ 

      vi1 = inflater.inflate(R.layout.my_layout, null); 

      ImageView imv = (ImageView) vi1.findViewById(R.id.Image); 
      ImageView imv2 = (ImageView) vi1.findViewById(R.id.imageView2); 
      TextView tw1 = (TextView) vi1.findViewById(R.id.lName); 
     //  TextView tw2 = (TextView) vi1.findViewById(R.id.County); 
     // TextView tw3 = (TextView) vi1.findViewById(R.id.user); 
//   imageLoader.DisplayImage(null, imv); 
    //  imageLoader.DisplayImage(null, imv2); 
      tw1.setText("AZ"); 
     } 


      return vi1; 


    } 

ответ

1

Ваша реализация для getView() довольно неэффективна. Найдите стратегию «ViewHolder» или «RowWrapper» для улучшения. Хорошей отправной точкой является this resource на сайте Android dev, но я бы определенно рекомендовал пройти через Romain Guy's Google I/O 2010 presentation on this topic. Если вы предпочитаете это, есть видеоролик YouTube о его сеансе.

Ваш результат должен в конечном итоге выглядеть примерно так:

@Override public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.my_layout, parent, false); 
     holder = new ViewHolder(); 
     holder.text = (TextView) convertView.findViewById(R.id.lName); 
     holder.img1 = (ImageView) convertView.findViewById(R.id.Image); 
     holder.img2 = (ImageView) convertView.findViewById(R.id.imageView2); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    holder.text.setText("AZ"); 
    holder.img1.setImageBitmap(...); 
    holder.img2.setImageResource(...); 
    return convertView; 
} 

static class ViewHolder { 
    TextView text; 
    ImageView img1, img2; 
} 
0

Существует проблема в письменном виде свои взгляды GetView Code.Your создаются каждый раз для каждой строки. Ниже приведен правильный способ использования метода getView. Вам необходимо создать класс ViewHolder.

static class ViewHolder { 
    ImageView img1; 
    ImageView img2; 
    TextView tvTitle; 

} 

     @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       View row = convertView; 
       ViewHolder holder; 

       if (row == null) { 
        holder = new ViewHolder(); 
        LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
        row = inflater.inflate(R.layout.my_layout, parent, false); 
        holder.play = (Button) row.findViewById(R.id.btn_list_play); 
        holder.img1 = (ImageView) row.findViewById(R.id.img1_id); 
        holder.img2 = (ImageView) row .findViewById(R.id.img2_id); 
        holder.tvTitle = (TextView) row.findViewById(R.id.tvTitle_id); 
        row.setTag(holder); 
      } 
     else 
     { 
         holder = (ViewHolder) row.getTag(); 

     } 
        holder.tvTitle.setText("AZ"); 

       return row; 
      } 
+0

Но есть та же самая проблема :( – Qafqaz

+0

По RomainGuy в Creater из Listview этот метод является рекомендуемым методом раздувать представления в Listview..There может быть какая-то другая проблема, которая может вызвать проблему ... Если бы вы могли опубликовать еще какой-то код, тогда было бы легче диагностировать .. –

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