2012-12-31 1 views
4

나는이 지역에서 초보자 해요 "(convertView == NULL)이", 그래서 pls는 인내심 : 나는 아래 아이콘 + 텍스트의 GridView를 설정하는 몇 가지 위해 LayoutInflater를 사용하고의 GridView 및 아이콘 엉망

사용하는 동안 . 아래에 설명 할 때 모든 것이 잘됩니다. 하지만 주석문을 제거 할 때 "//"모든 것이 엉망이됩니다. 아이콘은 잘못된 순서로 표시되며 몇 군데에도 두 배로 나타납니다. 당신이 convertViewnullGridView 인 경우 (이 예를 들어 일어날 이미지를 설정하기 때문에 일어나는 http://developer.android.com/guide/topics/ui/layout/gridview.html

답변

2

:

View v; 
// if (convertView == null) { // if it's not recycled, initialize some attributes 
     LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = li.inflate(R.layout.icon, null); 
     TextView tv = (TextView)v.findViewById(R.id.icon_text); 
     tv.setText(kraj[position]); 
     ImageView iv = (ImageView)v.findViewById(R.id.icon_image); 
     iv.setImageResource(mThumbIds[position]); 
     iv.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     iv.setLayoutParams(new LinearLayout.LayoutParams(mniejszy, mniejszy)); 
// } else { 
    // v = (View) convertView; 
// } 
    return v; 

내가의 코드의 일부를 가지고 튜토리얼입니다 처음에는 화면에 표시됨) GridView이 스크롤 될 때 ( convertView이 null이 아닐 때) 행 뷰를 재활용하므로 새 이미지/텍스트로 업데이트하지 않은 이전 행으로 끝납니다. 코드는 다음과 같이해야한다 : 당신이 경험하는 것은 사실 recycled view에 이전에 할당 된 데이터가 때문에 아마

View v; 
    if (convertView == null) { // if it's not recycled, initialize some attributes 
     LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = li.inflate(R.layout.icon, null);    
    } else { 
     v = (View) convertView; 
    } 
    TextView tv = (TextView)v.findViewById(R.id.icon_text); 
    tv.setText(kraj[position]); 
    ImageView iv = (ImageView)v.findViewById(R.id.icon_image); 
    iv.setImageResource(mThumbIds[position]); 
    iv.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    iv.setLayoutParams(new LinearLayout.LayoutParams(mniejszy, mniejszy)); 
    return v; 
+0

좋아, 그렇다면 "if"는 무엇입니까? convertView == 0인지 확인하지 않고 정상적으로 작동합니까? – Lukis

+0

'if'는 성능 향상입니다. 뷰가 이미 초기화 된 경우, 왜 다시 플레 넘이됩니까? 당신은 작은 목록에서 그것을 알아 채지 못할 수도 있지만 낭비 적이 아닌 큰 목록에서는 많은 도움이됩니다. –

+0

의미가 있습니다! Thx 당신의 도움. 내가 더 많은 평판을 얻으면, 나는 당신을 투표 할 것입니다. – Lukis

1

.

방향에 대한 코드를 검토하십시오.

View v; 
if(convertView == null) { 
    LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = li.inflate(R.layout.icon, null); 
} else { 
v = (View) convertView; 
} 

// now override whatever `recycled view` has 

    TextView tv = (TextView)v.findViewById(R.id.icon_text); 
     tv.setText(kraj[position]); 
     ImageView iv = (ImageView)v.findViewById(R.id.icon_image); 
     iv.setImageResource(mThumbIds[position]); 
     iv.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     iv.setLayoutParams(new LinearLayout.LayoutParams(mniejszy, mniejszy)); 

return v; 
+0

이것은 정확히 틀린 것입니다! 고마워! 나는 당신을 투표 할 수 없다. 왜냐하면 나는 15 명을 밑돈다.하지만 고맙다. – Lukis