4

私はこの分野では初心者なので、我慢してください:)

LayoutInflater を使用して、GridView をアイコン + テキストで設定しています。以下のように使用すると、すべてうまくいきます。しかし、コメントマーク「//」を削除すると、すべてが台無しになります。アイコンが間違った順序で表示され、いくつかの場所で二重になっています。

    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;

これは、コードの一部を取得したチュートリアルです: http://developer.android.com/guide/topics/ui/layout/gridview.html

4

2 に答える 2

2

これは、画像を設定するときにのみ画像を設定するために発生します(これconvertViewnull、たとえばGridViewが画面に最初に表示されたときに発生します) 。新しい画像/テキストで更新しなかった古い行。コードは次のようになります。GridViewconvertView

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;
于 2012-12-31T15:54:45.010 に答える
1

これはおそらく、recycled view以前に割り当てたデータが にあるためです。

方向については、以下のコードを確認してください。

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;
于 2012-12-31T15:57:02.343 に答える