Android实现价格排序0,也发一个自己实现的android简单文件选择器代码。支持多卡,排序...

1 packagenet.yunstudio.demo;2

3 importjava.io.File;4 importjava.text.Collator;5 importjava.util.ArrayList;6 importjava.util.Collections;7 importjava.util.Comparator;8 importjava.util.HashMap;9 importjava.util.List;10 importjava.util.Locale;11 importjava.util.Map;12

13

14 importandroid.app.Dialog;15 importandroid.content.Context;16 importandroid.os.Environment;17 importandroid.text.TextUtils;18 importandroid.util.Log;19 importandroid.view.View;20 importandroid.widget.AdapterView;21 importandroid.widget.AdapterView.OnItemClickListener;22 importandroid.widget.ListView;23 importandroid.widget.SimpleAdapter;24

25 public class FilePickerDialog extends Dialog implementsOnItemClickListener{26

27 publicFilePickerDialog(Context context) {28 super(context);29 init();30 }31

32

33 privateListView lv_file;34 privateSimpleAdapter simpleAdapter;35 private List>dataList;36 privateOnFileSelectListener listener;37 //通过获取sd卡的父级,可以兼容双sd卡的情况

38 private static final File rootPath=

39 Environment.getExternalStorageDirectory().getParentFile();40

41 private static final String SRC="src";42 private static final String NAME="name";43 private static final String FILE="file";44 private static final String IS_BAK="isBak";45

46 private voidinit() {47 getChildren2dataList(rootPath);48 simpleAdapter=newSimpleAdapter(getContext(),dataList , R.layout.list_item_choosefile,49 new String[]{SRC,NAME}, new int[]{R.id.iv_file_type,R.id.tv_file_name});50

51 lv_file=newListView(getContext());52 lv_file.setAdapter(simpleAdapter);53 lv_file.setOnItemClickListener(this);54 setContentView(lv_file);55

56 setCanceledOnTouchOutside(true);57 this.setTitle("请选择文件");58 }59 /**

60 * 设置选择文件的监听器61 *@paramlistener62 */

63 public voidsetOnFileSelectListener(OnFileSelectListener listener) {64 this.listener =listener;65 }66 /**

67 * 将本目录的子文件的信息赋值给dataList字段68 *@paramdir69 */

70 private voidgetChildren2dataList(File dir) {71 File[] children=dir.listFiles();72 if(dataList==null){73 dataList=new ArrayList>();74 }else{75 dataList.clear();76 }77

78 if(!rootPath.equals(dir)){79 Map map=new HashMap();80 map.put(SRC, R.drawable.folder);81 map.put(NAME, "..");82 map.put(FILE, dir.getParentFile());83 map.put(IS_BAK, true);84 dataList.add(map);85 }86 if(children==null) return ;//避免空目录引起的空指针错误

87 for(File file : children) {88 Map map=new HashMap();89 map.put(SRC, file.isDirectory()90 ?R.drawable.folder91 :R.drawable.file);92 map.put(NAME, file.getName());93 map.put(FILE, file);94 dataList.add(map);95 }96

97

98 Collections.sort(dataList, new Comparator>() {99

100 @Override101 public int compare(Map lhs, Maprhs) {102 int result=0;103

104 if(lhs.get(IS_BAK)!=null){105 result = -1;106 }else if (rhs.get(IS_BAK)!=null) {107 result = 1;108 }else{109 File lhsFile=(File) lhs.get(FILE);110 File rhsFile=(File) rhs.get(FILE);111

112 if(lhsFile.isDirectory()&&rhsFile.isFile()){113 result = -1;114 }else if (lhsFile.isFile()&&rhsFile.isDirectory()) {115 result = 1;116 }else{117 Collator cmp =Collator.getInstance(Locale.getDefault());118 result =cmp.compare(lhs.get(NAME), rhs.get(NAME));119 }120 }121 returnresult;122 }123 });124 }125

126 @Override127 public void onItemClick(AdapterView> parent, View view, intposition,128 longid) {129 File file=(File)dataList.get(position).get(FILE);130 if(file.isDirectory()){131 getChildren2dataList(file);132 simpleAdapter.notifyDataSetChanged();133 }else{134 if(listener!=null){135 listener.onFileSelect(file);136 this.dismiss();137 }138 }139 }140

141 public static interfaceOnFileSelectListener{142 voidonFileSelect(File file);143 }144 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值