2015-01-22 6 views
0

나는 나와 같은 문제를 가진 사람들을 많이 보았고 제안 된 해결책 중 일부를 시도했지만 지금까지 아무 것도 시도하지 못했습니다.Android - Gridview Lag

나는 내부 메모리에 저장되어있는 이미지 (그리고 아래에 작은 제목)가있는 gridView을 가지고 있습니다 (처음에는 SD 카드에 저장되었지만 오류가 해결 될 수 있다고 생각해서 변경했습니다).

나는 getView() 방법의 효율성을 향상시킬 필요가 있다고 생각합니다. 누구든지 지연을 일으키는 오류를 발견합니까?

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

     View v = convertView; 
     ImageView picture; 
     TextView name; 

     if(v == null) { 
      v = inflater.inflate(R.layout.grid_item, parent, false); 
      v.setTag(R.id.picture, v.findViewById(R.id.picture)); 
      v.setTag(R.id.text, v.findViewById(R.id.text)); 
     } 

      picture = (ImageView)v.getTag(R.id.picture); 
      name = (TextView)v.getTag(R.id.text); 

      Beer item = (Beer)getItem(position); 

      picture.setImageBitmap(decodeScaledBitmapFromSdCard(item.photoPath, 150, 150)); 
      name.setText(item.name); 

     return v; 
    } 

감사합니다.

답변

0

당신은 View Holder 패턴을 사용해야합니다.

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

     View v = convertView; 
     DataHolder holder = null; 

     if(holder == null) { 
      v = inflater.inflate(R.layout.grid_item, parent, false); 
      holder = new DataHolder(); 

      holder.name = (TextView) v.findViewById(R.id.text); 
      holder.picture = (ImageView) v.findViewById(R.id.picture); 
     } 
     else{ 
      holder = (DataHolder) v.getTag(); 
     } 
      v.setTag(holder) 
holder.picture.setImageBitmap(decodeScaledBitmapFromSdCard(item.photoPath, 150, 150)); 
      holder.name.setText(item.name); 

     return v; 
    } 

static class DataHolder{ 
     ImageView picture; 
     TextView name; 
} 
+0

감사! 그러나 지연은 계속됩니다 ... 당신은'Beer item = (Beer) getItem (position); '을 인스턴스화하는 것을 잊었습니다. 나는'DataHolder holder = null; '다음에'row.findViewById'대신'v.findViewById'로 바꿨다. –

+0

다른 아이디어가 있습니까? :) –