【问题标题】:images are not being displayed in gridview图像未显示在网格视图中
【发布时间】:2017-08-13 20:53:39
【问题描述】:

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

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;
        }

    }
}

【问题讨论】:

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


【解决方案1】:

问题是您正在设置adapter 并尝试获取图像,因此您的适配器没有得到图像更改或不知道。

还有你从​​未设置过的适配器中的数据List&lt;GridViewItem&gt; items。

还有getCount 应该返回大小而不是“0”

@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;
    }

【讨论】:

  • 我可以用 fileList 代替 items 吗??
  • 但是先获取images的值,然后在list中设置adapter
  • 如何获取图片的价值?我对此真的很陌生。
  • 你可以使用Glide加载图片,你可以使用Glide..吗?
  • 是的,我可以用,谢谢
【解决方案2】:

我已经在这里回答了这个问题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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2014-04-14
    • 1970-01-01
    • 2015-08-23
    • 2013-04-19
    • 1970-01-01
    相关资源
    最近更新 更多