簡體   English   中英

GridView中沒有顯示圖像

[英]no images being displayed in GridView

我真的是應用程序開發的新手,我一直在嘗試創建圖片庫應用程序。 但是當我單擊以打開該應用程序時,沒有任何顯示。 我已經閱讀了很多有關SO的問題,但並沒有太大幫助。 我在代碼中找不到任何錯誤,誰能告訴我我的代碼有什么問題嗎?

imageGallery.java

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.GridView;

import java.io.File;
import java.util.ArrayList;

public class imageGallery extends Activity {

    ArrayList<String> images;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_gallery);

        images = new ArrayList<>();// list of file paths
        getFromSdcard();

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this, images));
    }

    File[] listFile;

    public void getFromSdcard() {
        File file = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES), "InsCam + FixBlur");
        if (listFile != null && listFile.length > 0) {
            for (File file1 : listFile) {

                if (file1.isDirectory()) {

                    listFile = file.listFiles();
                } else {
                    if (file.getName().endsWith(".png")
                            || file.getName().endsWith(".jpg")
                            || file.getName().endsWith(".jpeg")
                            || file.getName().endsWith(".gif")
                            || file.getName().endsWith(".bmp")
                            || file.getName().endsWith(".webp"))


                    {
                        String temp = file1.getPath().substring(0, file1.getPath().lastIndexOf('/'));
                        if (!images.contains(temp))
                            images.add(temp);
                    }
                }
            }
        }
    }
}

ImageAdapter.java

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

import java.util.List;

public class ImageAdapter extends BaseAdapter {
    private static final int PADDING = 8;
    private static final int WIDTH = 250;
    private static final int HEIGHT = 250;
    private Context mContext;
    private List<String> mThumbIds;

    public ImageAdapter(Context c, List<String> ids){
        mContext = c;
        this.mThumbIds = ids;
    }

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

    @Override
    public Object getItem(int position) {
        return null;
    }

    // Will get called to provide the ID that
    // is passed to OnItemClickListener.onItemClick()
    @Override
    public long getItemId(int position) {
        return position;
    }

    // create a new ImageView for each item referenced by the Adapter
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ImageView imageView = (ImageView) convertView;

        // if convertView's not recycled, initialize some attributes
        if (imageView == null) {
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(WIDTH, HEIGHT));
            imageView.setPadding(PADDING, PADDING, PADDING, PADDING);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        }

        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(mThumbIds.get(position), options);

        // Set inSampleSize
        options.inSampleSize = 4;

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        Bitmap myBitmap = BitmapFactory.decodeFile(mThumbIds.get(position), options);

        imageView.setImageBitmap(myBitmap);

        return imageView;
    }
}

您的適配器中的getItem方法返回的null似乎是問題所在。 轉換字符串路徑后,您應該返回字符串路徑或位圖,而返回類型是對象。 所以我建議這個。

class ImageAdapter extends BaseAdapter{

  @Override
   public Object getItem(int position) {
        //I have shown string example here.. you can update as per your needs..
       return mThumbIds.get(position);
   }

}

希望這可以幫助..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM