BaseAdapterを拡張するカスタムImageAdapterクラスを使用して入力されたグリッドビューがあります。画像はSDカードの特定のフォルダから動的に読み込まれます。位置(1.png、2.pngなど)に従って画像に名前を付けました。グリッドアイテムにもを設定しOnClickListener
ました。画像と同じ名前のオーディオファイルがSDカードから再生されます。
画像の数が少なく、画面に収まる場合にうまく機能します。
ただし、数が多く、画像が画面に収まらない場合、画面を下にスクロールして表示される次の行のセットは、ほとんどの場合、対応する位置の画像ではなく、最初の数行の画像の繰り返しです。
logcatからgetView()
、アダプタクラスの関数は、最初は画面に表示されている画像に対してのみ呼び出され、下にスクロールしている間は、それ以降の位置に対して適切に呼び出されないことがわかりました。
また、画像のセット全体が再配置されることもあります。多数の画像を適切に表示するために、グリッドビューの基本的な実装とは異なることを行う必要がありますか?他に気をつけなければならないことはありますか?
編集-コード
を使用して各タブを設定しています
tabGrid[i].setAdapter(new ImageAdapter(this,i));
これはイメージアダプタクラスです
@Override
public int getCount() {
// fileNames is a string array containing the image file names : 1.png, 2.png etc
return fileNames.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
// I did not use this function
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v;
if(convertView==null) {
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.grid_image, null);
ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
String bitmapFileName = fileNames[position];
Bitmap bmp =(Bitmap)BitmapFactory.decodeFile(dir.getPath() + "/" + bitmapFileName);a
iv.setImageBitmap(bmp);
}
else {
v = convertView;
}
return v;
}
getItem()
およびgetItemId()
機能は重要ですか?ディレクトリとファイル名はすべて有効です。