2011-07-08 43 views
1

我已經完成了程序動態顯示來自sdcard的所有圖片。但現在,我想從sdcard動態顯示單個圖像,而不是顯示所有圖像。 我的編碼如下如何從SD卡動態顯示單張圖片

public class Gallery1Activity extends Activity { 
// private ArrayList<String> imglist; 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    ArrayList arr = new ArrayList(); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gallerygrid); 

    GridView gv1=(GridView) this.findViewById(R.id.gridView1); 
    //gv1.setAdapter(new galleryImageAdapter(this)); 

    arr = galldatabase(); 
    gv1.setAdapter(new galleryImageAdapter(this,arr)); 

} 

private ArrayList galldatabase() { 
    // TODO Auto-generated method stub 
    ArrayList ThumbsIDList = new ArrayList(); 
    //Uri u=MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI; 

    /*String[] projection =new String[]{ 
     Images.Thumbnails._ID, 
     Images.Thumbnails.DATA, 
     Images.Thumbnails.IMAGE_ID};*/ 

    Cursor galleryimagecursor=managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,new String[]{ 
      Images.Thumbnails._ID, 

      Images.Thumbnails.DATA} , null, null, null); 

    if(galleryimagecursor!=null&&galleryimagecursor.moveToFirst()){ 


     String thumbsID; 
     String thumbsImageID; 
     String thumbsData; 



     int num=0; 

     do{ 


      thumbsID=galleryimagecursor.getString(galleryimagecursor.getColumnIndexOrThrow(Images.Thumbnails._ID)); 
      thumbsData=galleryimagecursor.getString(galleryimagecursor.getColumnIndexOrThrow(Images.Thumbnails.DATA)); 

      Log.i("BMP","size "+thumbsID+" "+thumbsData); 


      num++; 

      /*if(thumbsImageID!= null) {*/ 
       ThumbsIDList.add(thumbsID); 
       /*ThumbsImageIDList.add(galleryimagecursor.getString(thumbsImageIDcol)); 
       ThumbsDataList.add(galleryimagecursor.getString(thumbsDataCol)); 
     }*/ 



     } 
     while(galleryimagecursor.moveToNext()); 


    } 
    return ThumbsIDList; 

} 

} 

則適配器代碼如下

public class galleryImageAdapter extends BaseAdapter { 

Context con; 
private ArrayList<String> imgList; 

private String thumbsID; 
public galleryImageAdapter(Context c,ArrayList arr){ 
    con=c; 
    imgList = arr; 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return imgList.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 



@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    View v; 

    if(convertView==null){ 

     LayoutInflater li; 
     li = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v=li.inflate(R.layout.galleryadapter,null); 

     final ImageView iv1=(ImageView)v.findViewById(R.id.galimage); 
     TextView tv1=(TextView)v.findViewById(R.id.galimagtext); 
     tv1.setText("Image"+position); 
     Log.d("imagevalue",imgList.get(position)); 



     iv1.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, ""+imgList.get(position)/*galleryimagecursor.getColumnIndexOrThrow(Images.Thumbnails._ID)*//*imgList.get(position)*/)); 




    } 
    else 
     v=convertView; 

    return v; 
} 

}

回答

0

您在使用arr = galldatabase();創建另一個的ArrayList(newarr),這隻會有圖像的拇指ID的數組列表1個元素。如果你想顯示第二圖像只是複製從ARR ARR該圖像的拇指ID,並將其存儲在新的數組列表

例如

ArrayList newarr = new ArrayList(); 
newarr.add(arr.get(random position)); 

分配此列表中的適配器,而不是分配給它包含原始數組列表所有圖像的列表

使用

gv1.setAdapter(new galleryImageAdapter(this,newarr));