A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 老衲玩IT 中级黑马   /  2013-8-25 22:02  /  1119 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

IconifiedText<----IconifiedTextView<----IconifiedTextListAdapter<-----MainActivity
上述为四个类,后者依赖前者
  1. package com.example.huajunfilebrowser;
  2. import android.graphics.drawable.Drawable;
  3. public class IconifiedText implements Comparable<IconifiedText> {
  4.         private String text="";
  5.         private Drawable icon=null;
  6.         private String path;
  7.         private boolean selectable=true;       
  8.         public IconifiedText() {
  9.         }
  10.         public IconifiedText(String text, Drawable icon,String path) {
  11.                 super();
  12.                 this.text = text;
  13.                 this.icon = icon;
  14.                 this.path=path;
  15.         }
  16.         public void setPath(String path) {
  17.                 this.path = path;
  18.         }
  19.         public String getPath() {
  20.                 return path;
  21.         }
  22.         public String getText() {
  23.                 return text;
  24.         }
  25.         public void setText(String text) {
  26.                 this.text = text;
  27.         }
  28.         public Drawable getIcon() {
  29.                 return icon;
  30.         }
  31.         public void setIcon(Drawable icon) {
  32.                 this.icon = icon;
  33.         }
  34.         public boolean isSelectable() {
  35.                 return selectable;
  36.         }
  37.         public void setSelectable(boolean selectable) {
  38.                 this.selectable = selectable;
  39.         }
  40.         @Override
  41.         public int compareTo(IconifiedText another) {
  42.                 if(this.text!=null){
  43.                         return this.text.compareTo(another.getText());
  44.                 }else {
  45.                         throw new IllegalArgumentException();
  46.                 }
  47.         }

  48. }
复制代码
  1. public class IconifiedTextView extends LinearLayout {
  2.         private TextView mTextView=null;
  3.         private ImageView mImageView=null;
  4.         public IconifiedTextView(Context context, IconifiedText aIconifiedText) {
  5.                 super(context);
  6.                 this.setOrientation(HORIZONTAL);
  7.                 mImageView=new ImageView(context);
  8.                 mImageView.setImageDrawable(aIconifiedText.getIcon());
  9.                 mImageView.setPadding(8, 12, 6, 12);
  10.                 addView(mImageView);
  11.                
  12.                 mTextView=new TextView(context);
  13.                 mTextView.setText(aIconifiedText.getText());
  14.                 mTextView.setPadding(8, 6, 6, 10);
  15.                 mTextView.setTextSize(26);
  16.                 addView(mTextView);
  17.                
  18.         }
  19.         public void  setTextView(String words) {
  20.                 mTextView.setText(words);
  21.         }
  22.         public void setImageView(Drawable bullet) {
  23.                 mImageView.setImageDrawable(bullet);
  24.         }
  25. }
复制代码
  1. /**
  2. * 自定义文件列表适配器
  3. * @author 老衲玩IT
  4. */
  5. public class IconifiedTextListAdapter extends BaseAdapter {
  6.         private Context context;
  7.         private List<IconifiedText> items=new ArrayList<IconifiedText>();
  8.         public IconifiedTextListAdapter(Context context){
  9.                 this.context=context;
  10.         }
  11.         public IconifiedTextListAdapter(Context context,List<IconifiedText> lit){
  12.                 this.context=context;
  13.                 this.items=lit;
  14.         }
  15.         public void addItem(IconifiedText it) {
  16.                 this.items.add(it);
  17.         }
  18.         public void  setListItems(List<IconifiedText> lit) {
  19.                 this.items=lit;
  20.         }
  21.         public boolean areAllItemsSelectable() {
  22.                 return false;
  23.         }
  24.         public boolean isSelectable(int position) {
  25.                 return items.get(position).isSelectable();
  26.         }
  27.         @Override
  28.         public int getCount() {
  29.                 return this.items.size();
  30.         }
  31.         @Override
  32.         public Object getItem(int position) {
  33.                 return this.items.get(position);
  34.         }
  35.         @Override
  36.         public long getItemId(int position) {
  37.                 // TODO Auto-generated method stub
  38.                 return position;
  39.         }
  40.         @Override
  41.         public View getView(int position, View convertView, ViewGroup parent) {
  42.                 IconifiedTextView itv;
  43.                 if(convertView==null){
  44.                         itv=new IconifiedTextView(context, this.items.get(position));
  45.                 }else {
  46.                         itv=(IconifiedTextView) convertView;
  47.                         itv.setTextView(this.items.get(position).getText());
  48.                         itv.setImageView(this.items.get(position).getIcon());
  49.                 }
  50.                 return itv;
  51.         }

  52. }
复制代码
  1. /**
  2. * 程序入口
  3. * @author 老衲玩IT
  4. *
  5. */
  6. public class MainActivity extends Activity {
  7.         //文件列表
  8.         ListView listView;
  9.         ImageButton imbtnBack;
  10.         TextView tvCurrent;
  11.         String currentDir="sdcard";
  12.         File fileDir;
  13.         File childFile;
  14.         //List<IconifiedText> listIfts=new ArrayList<IconifiedText>();
  15.         @Override
  16.         protected void onCreate(Bundle savedInstanceState) {
  17.                 super.onCreate(savedInstanceState);
  18.                 setContentView(R.layout.activity_main);
  19.                 listView=(ListView) findViewById(R.id.listView);
  20.                 fileDir=new File(currentDir);
  21.                 imbtnBack=(ImageButton) findViewById(R.id.imbtnback);
  22.                 tvCurrent=(TextView) findViewById(R.id.dir);
  23.                 tvCurrent.setText(fileDir.getName());
  24.                 //返回上级目录的按钮
  25.                 imbtnBack.setOnClickListener(new View.OnClickListener() {
  26.                         @Override
  27.                         public void onClick(View v) {
  28.                                 toParent();
  29.                         }
  30.                 });
  31.                 listView.setOnItemLongClickListener(new OnItemLongClickListener() {
  32.                         @Override
  33.                         public boolean onItemLongClick(AdapterView<?> parent, View view,
  34.                                         int position, long id) {
  35.                                 childFile=new File(((IconifiedText)parent.getItemAtPosition(position)).getPath());
  36.                                 rename();
  37.                                 return false;
  38.                         }
  39.                 });
  40.                 listView.setOnItemClickListener(new OnItemClickListener() {
  41.                         @Override
  42.                         public void onItemClick(AdapterView<?> parent, View view,
  43.                                         int position, long id) {
  44.                                 String path=((IconifiedText)parent.getItemAtPosition(position)).getPath();
  45.                                 fileDir=new File(path);
  46.                                 browseTo(fileDir);
  47.                         }
  48.                 });
  49.                 browseTo(fileDir);
  50.         }
  51.         /**
  52.          * 返回上级目录
  53.          */
  54.         private void toParent() {
  55.                 String fileParent=fileDir.getParent();
  56.                 if (fileParent!=null) {
  57.                         browseTo(new File(fileParent));
  58.                 }else {
  59.                         finish();
  60.                 }
  61.         }
  62.         /**
  63.          * 打开指定的文件
  64.          * @param afile
  65.          */
  66.         public void openFile(File afile) {
  67.                 Intent intent=new Intent();
  68.                 intent.setAction(android.content.Intent.ACTION_VIEW);
  69.                 File file=new File(afile.getAbsolutePath());
  70.                 String fileName=file.getName();
  71.                 if(checkEndWithInStringArray(fileName,getResources().getStringArray(R.array.fileEndingImage))){
  72.                         intent.setDataAndType(Uri.fromFile(file), "image/*");
  73.                 }else if(checkEndWithInStringArray(fileName,getResources().getStringArray(R.array.fileEndingAudio))){
  74.                         intent.setDataAndType(Uri.fromFile(file), "audio/*");
  75.                 }else if(checkEndWithInStringArray(fileName,getResources().getStringArray(R.array.fileEndingVideo))){
  76.                         intent.setDataAndType(Uri.fromFile(file), "video/*");
  77.                 }else {
  78.                          //getMIMEType(file);
  79.                         intent.setDataAndType(Uri.fromFile(file), "*/*");
  80.                 }
  81.                 startActivity(intent);
  82.         }
  83.         /**
  84.          * 访问指定文件目录
  85.          * @param file 需要访问的文件目录
  86.          */
  87.         private void browseTo(File file) {
  88.                 if (file.isDirectory()) {
  89.                         this.fileDir=file;
  90.                         String fileName=file.getName();
  91.                         if (fileName==null) {
  92.                                 fileName="";
  93.                         }
  94.                         tvCurrent.setText(fileName);
  95.                         //IconifiedText ift=new IconifiedText();
  96.                         File[] files=file.listFiles();
  97.                         Resources res=getResources();
  98.                         Drawable drawableDir=res.getDrawable(R.drawable.folder);
  99.                         //Drawable drawableFile=res.getDrawable(android.R.drawable.ic_menu_gallery);
  100.                         IconifiedTextListAdapter adapter=new IconifiedTextListAdapter(this);
  101.                         //List<File> fileList=new ArrayList<File>();
  102.                         //fileList.addAll(files);
  103.                         for (int i = 0; i < files.length; i++) {
  104.                                 for (int j = 1; j < i-1; j++) {
  105.                                         String si=files[i].getName();
  106.                                         String sj=files[j].getName();
  107.                                         if (si.compareTo(sj)<0) {
  108.                                                 File tempFile=files[i];
  109.                                                 files[i]=files[j];
  110.                                                 files[j]=tempFile;
  111.                                         }
  112.                                 }
  113.                         }
  114.                         for (int i = 0; i < files.length; i++) {
  115.                                 if (files[i].isDirectory()) {
  116.                                         if (files[i].getName().startsWith(".")) {
  117.                                                 continue;
  118.                                         }
  119.                                         adapter.addItem(new IconifiedText(files[i].getName(), drawableDir,files[i].getPath()));
  120.                                 }
  121.                         }
  122.                         for (int i = 0; i < files.length; i++) {
  123.                                 Resources resources=getResources();
  124.                                 if(files[i].isFile()){
  125.                                         IconifiedText ift=new IconifiedText();

  126.                                         if(checkEndWithInStringArray(files[i].getName(),resources.getStringArray(R.array.fileEndingImage))){
  127.                                                 ift.setIcon(res.getDrawable(R.drawable.image));
  128.                                         }
  129.                                         else if(checkEndWithInStringArray(files[i].getName(),resources.getStringArray(R.array.fileEndingAudio))){
  130.                                                 ift.setIcon(res.getDrawable(R.drawable.audio));
  131.                                         }
  132.                                         else if(checkEndWithInStringArray(files[i].getName(),resources.getStringArray(R.array.fileEndingVideo))){
  133.                                                 ift.setIcon(res.getDrawable(R.drawable.vedio));
  134.                                         }
  135.                                         else {
  136.                                                 ift.setIcon(res.getDrawable(R.drawable.otherfile));
  137.                                         }
  138.                                         String name=files[i].getName();
  139.                                         if (name.length()>20) {
  140.                                                 name=name.substring(0, 20);
  141.                                         }
  142.                                         ift.setText(name);
  143.                                         ift.setPath(files[i].getPath());
  144.                                         adapter.addItem(ift);
  145.                                 }
  146.                         }
  147.                         if (listView!=null) {
  148.                                 listView.setAdapter(adapter);
  149.                         }
  150.                 }else if (file.isFile()) {
  151.                         openFile(file);
  152.                 }
  153.         }
  154.         public void updateAdapter() {
  155.         }

  156.         @Override
  157.         public boolean onKeyDown(int keyCode, KeyEvent event) {
  158.                 if (keyCode==KeyEvent.KEYCODE_BACK) {
  159.                         toParent();
  160.                 }
  161.                 return true;
  162.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马