0

我在显示画廊视图中选择的图像预览时遇到问题。我有一个来自 sd 卡的图像库,单击图像时,其预览应显示在库视图下方(不是通过意图进行的单独活动)。我可以显示带有图像的画廊,但单击图像时没有任何反应。

公共类 NewActivity 扩展 Activity {

GalleryBaseAdapter myGalleryBaseAdapter;
Gallery myPhotoGallery;
int[] mFiles = null;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);      

    myPhotoGallery = (Gallery)findViewById(R.id.photogallery);

    myGalleryBaseAdapter = new GalleryBaseAdapter(this);

    String ExternalStorageDirectoryPath = Environment.getExternalStorageDirectory().getAbsolutePath();

    String path = ExternalStorageDirectoryPath;
    String  files;
    File  folder = new File (path);
    final File[] listOfFiles = folder.listFiles(); 

    for (int i = 0; i < listOfFiles.length; i++) 
    {       
         if (listOfFiles[i].isFile()) 
         {
             files = listOfFiles[i].getName();
             System .out.println(files);
         }
    }

    for (File file : listOfFiles) {
        myGalleryBaseAdapter.add(file.getPath());
    }        

    myPhotoGallery.setAdapter(myGalleryBaseAdapter);       


    myPhotoGallery.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView parent, View v, int position, long id) {

            mFiles = new int[listOfFiles.length];       

            ImageView imageview = (ImageView)findViewById(R.id.imageView1);     
            Bitmap bitmapImage = BitmapFactory.decodeFile("/sdcard/" + mFiles[position]);
            imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageview.setImageBitmap(bitmapImage); 

        }                   
    });
}

public class GalleryBaseAdapter extends BaseAdapter {

    ArrayList<String> GalleryFileList;
    Context context;

    GalleryBaseAdapter(Context cont){
        context = cont;
        GalleryFileList = new ArrayList<String>();    
    }

    @Override
    public int getCount() {
        return GalleryFileList.size();
    }

    @Override
    public Object getItem(int position) {
        return GalleryFileList.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Bitmap bm = BitmapFactory.decodeFile(GalleryFileList.get(position));

        LinearLayout layout = new LinearLayout(context);
        layout.setLayoutParams(new Gallery.LayoutParams(150, 150));
        layout.setGravity(Gravity.CENTER);

        ImageView imageView = new ImageView(context);
        imageView.setLayoutParams(new Gallery.LayoutParams(200, 200));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setImageBitmap(bm);

        layout.addView(imageView);
        return layout;
    }

    public void add(String newitem){
        GalleryFileList.add(newitem);
    }

}

}

谁能告诉我我的代码中的错误是什么。提前致谢。

4

1 回答 1

0

等等,但是.... onItemClick 中的 mFiles 变量是一个 int 空数组!?!您正在尝试解码一个路径,该路径是“/sdcard”和 mFiles'row 之间的连接,但是......您在哪里填充该数组?我认为您必须指定文件路径,例如“listOfFiles[position].getPath()”

于 2012-11-21T22:09:35.427 回答