onCreate:
private ListView photoList;
private PhotoListAdapter adapter;
private List<File> imgList = new ArrayList<File>();
private List<File> objFiles = new ArrayList<File>();
<span style="font-family: Arial, Helvetica, sans-serif;">private List<ImageClass> classList = new ArrayList<ImageClass>() ;</span>
private List<Object> mergeList = new ArrayList<Object>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo_manager);
photoList = (ListView) findViewById(R.id.photoListView);
Utils.createImageDir(getBaseContext());
loadSDcardPhoto();
adapter = new PhotoListAdapter(mergeList);
photoList.setOnItemClickListener(onItemClick);
photoList.setAdapter(adapter);
imgback_photom.setOnClickListener(onclick);
}
PhotoListAdapter :
private class PhotoListAdapter extends BaseAdapter {
private List<Object> imgList;
public PhotoListAdapter(List<Object> imgList){
this.imgList = imgList;
}
@Override
public int getCount() {
return imgList.size();
}
@Override
public Object getItem(int position) {
return imgList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Object obj = imgList.get(position);
if(obj instanceof String){
//标题
convertView = getLayoutInflater().inflate(R.layout.datetile, null);
((TextView)convertView.findViewById(R.id.datetitle)).setText(obj.toString());
convertView.setOnClickListener(null);
convertView.setOnLongClickListener(null);
convertView.setLongClickable(false);
} else{
//内容
convertView = getLayoutInflater().inflate(R.layout.photolistview_item, null);
//图片名称
((TextView)convertView.findViewById(R.id.imageName_photomanager)).setText(((ImageClass)obj).fileName);
//图片大小
((TextView)convertView.findViewById(R.id.imgSize_photomanager)).setText(((ImageClass)obj).fileSize);
//图片创建时间
((TextView)convertView.findViewById(R.id.imgcreatetime_photomanager)).setText(((ImageClass)obj).fileCreateTime);
//设置缩略图
ImageView img = (ImageView) convertView.findViewById(R.id.thunmailImg_photomanager);
//第三方工具ImageLoader异步加载图片
ImageLoader.getInstance().displayImage( "file://" + ((ImageClass)obj).filePath, img);
}
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;"><span style="white-space:pre"> </span>//重要</span>
convertView.setTag(obj);
return convertView;
}
}
PhotoListAdapter :
private class PhotoListAdapter extends BaseAdapter {
private List<Object> imgList;
public PhotoListAdapter(List<Object> imgList){
this.imgList = imgList;
}
@Override
public int getCount() {
return imgList.size();
}
@Override
public Object getItem(int position) {
return imgList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Object obj = imgList.get(position);
if(obj instanceof String){
//标题
convertView = getLayoutInflater().inflate(R.layout.datetile, null);
((TextView)convertView.findViewById(R.id.datetitle)).setText(obj.toString());
convertView.setOnClickListener(null);
convertView.setOnLongClickListener(null);
convertView.setLongClickable(false);
} else{
//内容
convertView = getLayoutInflater().inflate(R.layout.photolistview_item, null);
//图片名称
((TextView)convertView.findViewById(R.id.imageName_photomanager)).setText(((ImageClass)obj).fileName);
//图片大小
((TextView)convertView.findViewById(R.id.imgSize_photomanager)).setText(((ImageClass)obj).fileSize);
//图片创建时间
((TextView)convertView.findViewById(R.id.imgcreatetime_photomanager)).setText(((ImageClass)obj).fileCreateTime);
//设置缩略图
ImageView img = (ImageView) convertView.findViewById(R.id.thunmailImg_photomanager);
//第三方工具ImageLoader异步加载图片
ImageLoader.getInstance().displayImage( "file://" + ((ImageClass)obj).filePath, img);
}
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;"><span style="white-space:pre"> </span>//重要</span>
convertView.setTag(obj);
return convertView;
}
}
onItemClick:
private AdapterView.OnItemClickListener onItemClick = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Object obj = view.getTag();
if(<span style="color:#ff6666;">obj instanceof ImageClass</span>){ //这步是关键,防止点击position错位问题
Intent intent = new Intent(getBaseContext(), PhotoViewActivity.class);
intent.putExtra("imgPath", ((ImageClass)obj).filePath);
startActivity(intent);
}
}
};
1.加载sdcard某个文件夹的图片
<pre name="code" class="java"> /**加载SDcard的保存图片*/
private void loadSDcardPhoto(){
//需判断sdcard是否存在
File dirFile = new File(filepath);
if(!dirFile.exists()){
return;
}
CollectionsFiles(dirFile);
}
2.获取dirFile文件夹中的所有files,并进行排序
<span style="white-space:pre"> </span>private void CollectionsFiles(File dirFile){
File[] files = dirFile.listFiles();
if(files != null && files.length > 0){
for(File file : files){
objFiles.add(file);
}
for(File file : objFiles){
String path = file.getAbsolutePath();
int index = path.lastIndexOf(".");
if(path.substring(index + 1).compareToIgnoreCase("jpg") == 0){
imgList.add(file);
}
}
if(imgList != null && imgList.size() > 0){
<span style="color:#ff0000;">//排序 直接使用Collections.sort(imgList) 也是ok的;</span>
TimeCompartor com = new TimeCompartor();
Collections.sort(imgList, com);
for(File file : imgLit){
ImageClass c = new ImageClass();
c.fileName = file.getName();
c.filePath = file.getAbsolutePath();
c.fileCreateTime = Utils.getFilelastModify(file);
c.fileSize = Utils.getFileSize(file);
classList.add(c); //保存排序后的信息
}
}
Mathch match = new Mathch();
match.merge(classList);
}
}
</pre><div><br /></div>3.TimeCompartor</div><div><span style="white-space:pre"></span><pre name="code" class="java"> private class TimeCompartor implements Comparator<File> {
@Override
public int compare(File lhs, File rhs) {
long l = lhs.lastModified();
long r = rhs.lastModified();
Date d1 = new Date(l);
Date d2 = new Date(r);
if(d1.getTime() == d2.getTime())
return 0;
else if( d1.getTime() < d2.getTime())
return 1;
else if( d1.getTime() > d2.getTime())
return -1;
return 0;
}
}
3.ImageClass
/**文件信息类*/
public class ImageClass{
public String fileName;
public String fileSize;
public String filePath;
public String fileCreateTime;
}
4. Match class
/**数据拆分以 时间为key 保存到 map<String,List<ImageClass>>*/
private class Mathch{
@SuppressWarnings("rawtypes")
public void merge(List<ImageClass> hay) {
//将hay按照时间分组
Set<String> keys = new HashSet<String>();
<span style="white-space:pre"> </span>Map<String, PhotoGroup> groups = new TreeMap<String, PhotoGroup>(new Comparator<String>() {
<span style="color:#ff0000;"><span style="white-space:pre"> </span>//由于map是无顺序的,需要以 TreeMap 按key降序。进行排序。</span>
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public int compare(String lhs, String rhs) {
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>return rhs.compareTo(lhs);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>});
for (ImageClass obj : hay) {
String dates = obj.fileCreateTime;
keys.add(dates);
}
for (String key : keys) {
groups.put(key, new PhotoGroup());
}
for (ImageClass obj : hay) {
String dates = obj.fileCreateTime;
groups.get(dates).getIns().add(obj);
}
for (Map.Entry entry : groups.entrySet()) {
String key = entry.getKey().toString();
if(!mergeList.contains(key))
mergeList.add(key);
for(int i = 0; i < groups.get(key).getIns().size();i++){
mergeList.add(groups.get(key).getIns().get(i));
}
}
}
5.PhotoGroup class
/**相片组*/
public class PhotoGroup {
private List<ImageClass> ins = new ArrayList<ImageClass>();
public List<ImageClass> getIns(){
return ins;
}
public void SetIns(List<ImageClass> list){
this.ins = list;
}
}
这是读取本地文件夹图片的形式,布局文件就不贴了。其它通过服务器获取数据之类的,都可以按照match方法进行 分组、合并、显示