ListView 添加title 排序


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


 

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方法进行  分组、合并、显示



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为安卓的 ListView 添加数据,可以按照以下步骤进行: 1. 创建一个 ListView 对象,可以在布局文件中添加 ListView 控件或在代码中动态创建。 2. 创建一个适配器 Adapter,将数据与 ListView 绑定。Android 提供了多种适配器,如 ArrayAdapter、SimpleAdapter、BaseAdapter 等。选择适合自己的适配器,实现其中的方法,将数据与 ListView 绑定起来。 3. 将适配器 Adapter 设置给 ListView 对象。 4. 在 Activity 或 Fragment 中获取数据,并添加到适配器中。 5. 调用适配器的 notifyDataSetChanged() 方法,通知适配器数据已经改变,ListView 会自动更新显示。 示例代码如下: 1. 在布局文件中添加 ListView 控件 ``` <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 2. 创建适配器 Adapter ``` public class MyAdapter extends BaseAdapter { private List<String> mData; public MyAdapter(List<String> data) { this.mData = data; } @Override public int getCount() { return mData.size(); } @Override public String getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView; if (convertView == null) { textView = new TextView(parent.getContext()); } else { textView = (TextView) convertView; } textView.setText(getItem(position)); return textView; } } ``` 3. 将适配器设置给 ListView 对象 ``` ListView listView = findViewById(R.id.listView); MyAdapter adapter = new MyAdapter(data); listView.setAdapter(adapter); ``` 4. 获取数据并添加到适配器中 ``` List<String> data = new ArrayList<>(); data.add("data1"); data.add("data2"); adapter.notifyDataSetChanged(); ``` 在实际开发中,可以根据自己的需求对适配器进行定制。例如,在 getView() 方法中可以创建自定义的布局文件,实现更加复杂的列表项布局。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值