Java 图像未显示在gridview中
我一直在尝试创建一个imageGallery应用程序来在gridview中显示图像。我希望它只显示图像目录。但当我打开它时,图像不会显示。代码似乎没有什么问题。我不知道为什么它不工作。我没有收到任何错误或任何运行时异常。谁能告诉我我做错了什么?感谢您的任何帮助。谢谢 imageGallery.java: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
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吗?是的,我可以使用它,谢谢