2013-02-28 29 views
0

當我用GridView和添加自定義佈局的GridView我看到這個錯誤,我的應用程序工作很慢當我使用GridView時在android中跳過框架?

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」策略進行改進。 Android開發網站上的一個很好的起點是this resource,但我肯定會推薦通過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 2013-02-28 18:28:34

+0

根據RomainGuy列表視圖的創世這種方法是吹在Listview..There意見建議的方法可能是一些其他問題,可能會導致這個問題...如果你可以張貼更多的代碼,那麼它會更容易診斷.. – 2013-02-28 18:32:41

相關問題