Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图像未显示在gridview中_Java_Android_User Interface_Android Imageview_Image Gallery - Fatal编程技术网

Java 图像未显示在gridview中

Java 图像未显示在gridview中,java,android,user-interface,android-imageview,image-gallery,Java,Android,User Interface,Android Imageview,Image Gallery,我一直在尝试创建一个imageGallery应用程序来在gridview中显示图像。我希望它只显示图像目录。但当我打开它时,图像不会显示。代码似乎没有什么问题。我不知道为什么它不工作。我没有收到任何错误或任何运行时异常。谁能告诉我我做错了什么?感谢您的任何帮助。谢谢 imageGallery.java: import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; impo

我一直在尝试创建一个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;
        }

    }
}
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.os.Bundle;
导入android.os.Environment;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.GridView;
导入android.widget.ImageView;
导入android.widget.TextView;
导入java.io.File;
导入java.util.ArrayList;
导入java.util.List;
公共类imageGallery扩展活动{
private ArrayList fileList=new ArrayList();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u image\u gallery);
GridView imagegrid=(GridView)findViewById(R.id.GridView);
setAdapter(新的MyGridAdapter());
文件根=新文件(Environment.getExternalStorageDirectory().getAbsolutePath());
getFile(root);
}
公共ArrayList getFile(文件目录){
文件listFile[]=dir.listFiles();
if(listFile!=null&&listFile.length>0){
用于(文件:listFile){
if(file.isDirectory()){
getFile(文件);
}否则{
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”)){
字符串temp=file.getPath().substring(0,file.getPath().lastIndexOf('/');
如果(!fileList.contains(temp))
添加(临时文件);
}
}
}
}
返回文件列表;
}
公共类MyGridAdapter扩展了BaseAdapter{
充气机;
清单项目;
公共MyGridAdapter(){
充气器=(LayoutInflater)getSystemService(Context.LAYOUT\u充气器\u SERVICE);
}
@凌驾
public int getCount(){
返回0;
}
@凌驾
公共对象getItem(int位置){
返回项目。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=充气机。充气(R.layout.grid_项,空);
}
TextView text=(TextView)convertView.findViewById(R.id.TextView);
text.setText(items.get(position.getPath());
ImageView ImageView=(ImageView)convertView.findViewById(R.id.ImageView);
位图图像=items.get(position.getImage();
如果(图像!=null){
设置图像位图(图像);
}
否则{
//如果未提供图像,则显示文件夹图标。
setImageResource(R.drawable.adele1);
}
返回视图;
}
}
}

问题是您正在设置
适配器
并尝试获取图像,因此适配器没有了解图像是否更改

以及您从未设置的适配器中的数据
列表项

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

编辑:

这样做,

File root = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
getFile(root);
GridView imagegrid = (GridView) findViewById(R.id.gridview);
imagegrid.setAdapter(new MyGridAdapter());
    @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;
    }
在项目中添加Glide,将其添加到build.gradle文件中

compile 'com.github.bumptech.glide:glide:3.7.0'
像这样更改适配器getView

File root = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
getFile(root);
GridView imagegrid = (GridView) findViewById(R.id.gridview);
imagegrid.setAdapter(new MyGridAdapter());
    @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;
    }

我已经回答了这个问题。。。但是为了帮助那些有类似问题的人

在我的Glide 4.8.0中,将以下内容添加到Glide加载到的ImageView小部件中实现了这一点,wierd,但它是有效的

android:background="?attr/selectableItemBackgroundBorderless"
或者也

android:background="@drawable/R.drawable.yourResourceFile
或者也

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

我可以使用fileList而不是items吗?但是首先获取图像的值,然后在listhow中设置适配器以获取图像的值?我真的是个新手。你可以使用Glide加载图像,你可以使用Glide吗?是的,我可以使用它,谢谢