图像未在gridview中显示

时间:2017-08-13 20:53:39

标签: java android user-interface android-imageview image-gallery

我一直在尝试创建一个用于在gridview中显示图像的imageGallery应用。我希望它只显示图像目录。但是当我打开它时,图像不会显示。代码似乎没有错。我不知道为什么它不工作。我没有得到任何错误或任何运行时异常。任何人都可以帮助并告诉我我做错了什么?任何形式的帮助表示赞赏。谢谢。

imageGallery.java

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

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

public class imageGallery extends Activity {

    private ArrayList<String> fileList = new ArrayList<>();

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

        GridView imagegrid = (GridView) findViewById(R.id.gridview);
        imagegrid.setAdapter(new MyGridAdapter());
        File root = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
        getFile(root);
    }

    public ArrayList<String> getFile(File dir) {

        File listFile[] = dir.listFiles();
        if (listFile != null && listFile.length > 0) {
            for (File file : listFile) {
                if (file.isDirectory()) {
                    getFile(file);
                } 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 = file.getPath().substring(0, file.getPath().lastIndexOf('/'));
                        if (!fileList.contains(temp))
                            fileList.add(temp);
                    }
                }
            }
        }
        return fileList;
    }

    public class MyGridAdapter extends BaseAdapter {

        LayoutInflater inflater;
        List<GridViewItem> items;

        public MyGridAdapter() {

            inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }


        @Override
        public int getCount() {
            return 0;
        }

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


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


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            if (convertView == null) {
                convertView = inflater.inflate(R.layout.grid_item, null);
            }

            TextView text = (TextView) convertView.findViewById(R.id.textView);
            text.setText(items.get(position).getPath());

            ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
            Bitmap image = items.get(position).getImage();

            if (image != null){
                imageView.setImageBitmap(image);
            }
            else {
                // If no image is provided, display a folder icon.
                imageView.setImageResource(R.drawable.adele1);
            }
            return convertView;
        }

    }
}

2 个答案:

答案 0 :(得分:0)

问题是你正在设置adapter并试图获取图像,所以你的适配器没有得到图像的变化。

适配器中的数据从未设置List<GridViewItem> items

并且getCount也应该返回不是&#34; 0&#34;

的大小
@Override
public int getCount() {
    return items.size();
}

编辑:

这样做,

File root = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
getFile(root);
GridView imagegrid = (GridView) findViewById(R.id.gridview);
imagegrid.setAdapter(new MyGridAdapter());

在项目中添加Glide,将其添加到build.gradle文件中

compile 'com.github.bumptech.glide:glide:3.7.0'

像这样更改你的适配器getView,

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.grid_item, null);
        }

        TextView text = (TextView) convertView.findViewById(R.id.textView);
        text.setText(fileList.get(position));

        ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
        String imagePath = fileList.get(position);

        Glide.with(imageGallery.this).load(imagePath).placeholder( R.drawable.adele1).into(imageView);

        //if (image != null){
            //imageView.setImageBitmap(image);
        //}
        //else {
            // If no image is provided, display a folder icon.
            //imageView.setImageResource(R.drawable.adele1);
        //}
        return convertView;
    }

答案 1 :(得分:0)

我已经在这里https://stackoverflow.com/a/56111467/3904109回答了这个问题...但是是为了帮助那些有类似问题的人...

在我的Glide 4.8.0中,将以下内容添加到Glide加载到的ImageView小部件中可以达到目的,但这很奏效。...

android:background="?attr/selectableItemBackgroundBorderless"

或者也是

android:background="@drawable/R.drawable.yourResourceFile

或者也是

android:background="@android:color/transparent"