2012-05-12 6 views
2

私はsdカードの特定のフォルダから画像をグリッドビュー内に表示するアプリケーションを開発しました。アプリケーションは動作していますが、すべての画像を表示する必要がありますが、フォルダの最初の画像のみがすべてのグリッドに表示されます。私はどこに間違っていたのか分からない。グリッドビューのすべてのグリッドに1つの画像しか表示されません

アルバムアクティビティー:

public class Album3Activity extends Activity { 
static File [] mediaFiles; 
static File imageDir; 
GridView gridView; 
ImageAdapter adapter; 
Intent in; 
public static final String TAG = "Album3Activity"; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.grid); 
    prepareList(); 
    adapter = new ImageAdapter(this, mediaFiles); 
    gridView = (GridView)findViewById(R.id.gridview); 
    gridView.setAdapter(adapter); 
    gridView.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
       long arg3) { 
      in = new Intent(getApplicationContext(), FullScreen.class); 
      in.putExtra("id", position); 
      startActivity(in); 
     } 
    }); 
}//onCreate 

public static Bitmap prepareList() { 
    imageDir = new File(Environment.getExternalStorageDirectory().toString()+ 
      "/diplomat"); 
    mediaFiles = imageDir.listFiles(); 
    Bitmap bmp = null; 
    for(File imagePath:mediaFiles){ 
     try{ 
      bmp = BitmapFactory.decodeStream(imagePath.toURL().openStream()); 
     }catch(Exception e){ 
      Log.d(TAG, "Exception: "+e.toString()); 
     }//catch 
    }//for 
    Log.d(TAG, "prepareList() called"); 
    return bmp; 
}//prepareList 

} //クラス

イメージ・アダプタ:

public class ImageAdapter extends BaseAdapter{ 
Activity act; 
File[] mFiles; 
public static final String TAG = "ImageAdapter"; 
public ImageAdapter(Activity act, File[] mFiles){ 
    super(); 
    this.act = act; 
    this.mFiles = mFiles; 
}//ImageAdapter 

public int getCount() { 
    return mFiles.length; 
}//getCount 

public Object getItem(int postion) { 
    return mFiles[postion]; 
}//getItem 

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

public static class ViewHolder{ 
    ImageView iv; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder view; 
    LayoutInflater li = act.getLayoutInflater(); 
    if(convertView == null){ 
     view = new ViewHolder(); 
     convertView = li.inflate(R.layout.gridview_row, null); 
     view.iv = (ImageView)convertView.findViewById(R.id.imageView1); 
     convertView.setTag(view); 
    }//if 
    else{ 
     view = (ViewHolder)convertView.getTag(); 
    }//else 
    Bitmap bmp = Album3Activity.prepareList(); 
    view.iv.setImageBitmap(bmp); 
    Log.d(TAG, "getView called"); 
    return convertView; 
}//getView 

} // ImageAdapter

以下 、私は私のコードを投稿しています

答えて

0

getViewでは毎回album3Activity.prepareList()を呼び出すので、すべてのグリッドで単一のイメージが返されます。毎回mFiles [position]の特定のイメージパスを渡してみて、ビットマップを取得するか、すべてのビットマップを一度に取得してarrayListに格納し、arraylistをアダプタに渡してgetViewで使用します。それは同じ画像のすべての時間を返すよう

は、に変更し、ImageViewの位置またはインデックスによると、それはビットマップを返していません。.. this..itはあなたに役立つかもしれない

+1

申し訳ディーパを、あなたはリンクがここに表示されていないとして、あなたがすることを意図したリンクを再投稿してくださいすることができます。 – Nitish

2

注prepareList方法を試してみてくださいインデックスパラメータを受け入れ、それに応じてビットマップを返します。

public static Bitmap prepareList(int index) { 
    imageDir = new File(Environment.getExternalStorageDirectory().toString()+ 
      "/diplomat"); 
    mediaFiles = imageDir.listFiles(); 
    File imagePath=imageDir[index]; 
    Bitmap bmp = null; 
     try{ 
      bmp = BitmapFactory.decodeStream(imagePath.toURL().openStream()); 
     }catch(Exception e){ 
      Log.d(TAG, "Exception: "+e.toString()); 
     }//catch 
    Log.d(TAG, "prepareList() called"); 
    return bmp; 
}//prepareList 
+0

私のコードを修正しましたが、私は同じ問題に直面しています。 – Nitish

+0

コードを編集して、更新されたコードを反映させます。 – jeet

関連する問題