【发布时间】:2015-05-21 02:20:30
【问题描述】:
我正在开发一个基本的文件管理器,想知道如何清除 ArrayAdapter 子类(即我的自定义 FileListAdapter)并仍然让 emptyView 显示。如果没有文件,这是我目前制作 ArrayAdapter 的方法:
if(selectedFile.listFiles() == null){
mAdapter = new FileListAdapter(getActivity(), R.layout.file_item_layout, new File[0]);
mListView.setAdapter(mAdapter);
这是空视图
mListView.setEmptyView(getActivity().findViewById(android.R.id.empty));
setEmptyText("Empty folder");
这是我的自定义适配器:
public class FileListAdapter extends ArrayAdapter<File> {
private File[] folderContents;
private LayoutInflater inflater;
public FileListAdapter(Context context, int resource, File[] fileList) {
super(context, resource, fileList);
folderContents = fileList;
inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = convertView;
if(itemView == null){
itemView = inflater.inflate(R.layout.file_item_layout, parent, false);
}
//find the file
File currentFile = folderContents[position];
//fill the view
ImageView iconImage = (ImageView) itemView.findViewById(R.id.file_icon);
iconImage.setImageResource(FileType.getTypeImage(FileType.parseType(currentFile)));
String fileName = currentFile.getName();
TextView fileNameText = (TextView) itemView.findViewById(R.id.file_name);
fileNameText.setText(fileName);
String fileType = FileType.parse(currentFile);
TextView fileTypeText = (TextView) itemView.findViewById(R.id.file_type);
fileTypeText.setText(fileType);
String fileSizeText;
if(!currentFile.isDirectory()){
long fileSize = currentFile.length();
if(fileSize < 1024){
fileSizeText = fileSize + " Bytes";
} else if(fileSize >= 1024 && fileSize < 1048576){
//fileSizeText = (fileSize/1024) + "KB";
fileSizeText = String.format("%.2f KB", (float)(fileSize/1024.0));
} else if(fileSize >= 1048576 && fileSize < 1073741824){
//fileSizeText = (fileSize/1048576) + "MB";
fileSizeText = String.format("%.2f MB", (float)(fileSize/1048576.0));
} else {
//fileSizeText = (fileSize/1073741824) + "GB";
fileSizeText = String.format("%.2f GB", (float)(fileSize/1073741824.0));
}
}
else{
File[] dirContents = currentFile.listFiles();
if(dirContents == null){
fileSizeText = "N/A";
} else {
if(dirContents.length == 1){
fileSizeText ="1 item";
}
else{
fileSizeText = dirContents.length + " items";
}
}
}
TextView fileSizeTextView = (TextView)itemView.findViewById(R.id.file_size);
fileSizeTextView.setText(fileSizeText);
Date lastModifiedDate = new Date(currentFile.lastModified());
String lastModifiedText = "<" +lastModifiedDate.getMonth() + "/" + lastModifiedDate.getDate() + "/" + (lastModifiedDate.getYear() + 1900) + ">";
TextView lastModifiedDateText = (TextView) itemView.findViewById(R.id.last_modified);
lastModifiedDateText.setText(lastModifiedText);
return itemView;
}
}
这是列表的布局(将 listview 替换为 gridview 以获得另一个)
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.pcgeekbrain.madfiles.FileViewFragment">
<ListView android:id="@android:id/list" android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView android:id="@android:id/empty" android:layout_width="match_parent"
android:layout_height="match_parent" android:gravity="center" />
</FrameLayout>
我得到的是一个空白屏幕。文件夹中没有文件时如何让emptyView出现?
提前致谢。
【问题讨论】:
-
你可以检查:mAdapter .add(null);或 mAdapter = new FileListAdapter(getActivity(), R.layout.file_item_layout, null);
-
null 导致应用崩溃
-
你可以在 mAdapter .add(new Model()); 之后创建 Model(is File[] of you);
-
你用过ListFragment吗?
标签: java android android-arrayadapter