1

これは問題のあるコードです:

public class Level1 extends Activity {

int[] logos = {
        R.drawable.arutz8,
        R.drawable.channel1,
        R.drawable.doctor_gav,
        R.drawable.foxgroup3,
        R.drawable.careline,
        R.drawable.golfnew,
        R.drawable.haaretz,
        R.drawable.hafenix,
        /*R.drawable.hando,
        R.drawable.bankleumi,
        R.drawable.jerusalempostred,
        R.drawable.laisha,
        R.drawable.logo,
        R.drawable.logodelta,
        R.drawable.maariv,
        R.drawable.pelephone,
        R.drawable.ravbariah,
        R.drawable.renuar,
        R.drawable.reshet_tv,
        R.drawable.sano,
        R.drawable.shilav,
        R.drawable.sport5,
        R.drawable.srigamish,
        R.drawable.steimatzky,
        R.drawable.superpharm,
        R.drawable.supersal,
        R.drawable.tambur,
        R.drawable.tzometsfarim,
        R.drawable.walla,
        R.drawable.yediot,*/
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.level1);
    ListAdapter adapter = (new ArrayAdapter<Integer>(this, R.layout.level1));

    GridView grid = (GridView) findViewById(R.id.gridview1);
    grid.setAdapter(new ImageAdapter(this));
}


private class ImageAdapter extends BaseAdapter 
{
    private Context context;

    public ImageAdapter(Context c) 
    {
        context = c;
    }

    //---returns the number of images---
    public int getCount() {
        return logos.length;
    }

    //---returns the ID of an item--- 
    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    //---returns an ImageView view---
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(context);
            imageView.setLayoutParams(new GridView.LayoutParams(90, 90));
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            imageView.setPadding(5, 5, 5, 5);
        } else {
            imageView = (ImageView) convertView;
        }
        imageView.setImageResource(logos[position]);
        return imageView;
    }
} 

}

このプログラムは、すべての画像のサイズが各画像あたり約 60px である限り、完全に機能します。そのサイズの画像の問題は、すべての画像がくびれて醜いことです!. 大きな画像で使用しようとしましたが、何らかの理由で最初の 5 つの画像しか画面に表示されず、残りの画像を読み込もうとすると、アプリがクラッシュします。画像のサイズが原因だと思っていましたが、すべての画像が同じ大きなサイズであり、そのうちの5つが画面に描画されていることに気付きました。何か案は?

これらは logCat からのログです。

ログ

これは、レベル 1 ボタンを押したときの結果です。

結果

4

1 に答える 1

0

ImageAdapter の public View getView(...) メソッドに問題があります。convertView == null の場合、convertView を imageView にリンクすることはありません。そのため、else ステートメントに問題があります。これは、次の 2 つの方法で行うことができます。

  • あなたのようにコードで ImageView を定義することにより、あなたの場合、これが最良の選択になります:

    ImageView imageView = (ImageView) convertView;

    if (convertView == null) { convertView = new ImageView(context); imageView = (ImageView) convertView; // Set other parameters }

    // Set resource

    return convertView;

  • By defining your layout in a xml-layout file an using a layout inflater:

Handler handler;

 if (convertView == null) {
        LayoutInflater li = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = li.inflate(yourLayoutResourceId, parent, false);
        handler = new Handler();
        handler.itemIV = (ImageView) convertView.findViewById(imageViewLayoutId);

        convertView.setTag(handler);
    } else {
        handler = (Handler) convertView.getTag();
    }

     handler.imageView.setImageResource(...);
     return convertView;

Where yourLayoutResourceId is the id of the created xml-layout file (R.layout.exmaple), and imageViewLayoutId is the id of your imaeView in the layout (R.id.exmapleIV). As last step define an inner class Handler in your ImageAdapter:

class Handler { ImageView imageView; }

幸運を!よい発展を。

KR

于 2012-06-12T08:26:55.773 に答える