Android文件目录选择器(可自行扩展)

上一篇中写了文件下载的博文,其中说道要用户选择文件的保存目录,在此展示:

首先看FileBrowserActivity.java

[java] view plaincopy
  1. package com.knowhow.android.client;  
  2.   
  3. import java.io.File;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import android.app.AlertDialog;  
  8. import android.content.DialogInterface;  
  9. import android.content.Intent;  
  10. import android.graphics.Color;  
  11. import android.os.Bundle;  
  12. import android.view.View;  
  13. import android.view.View.OnClickListener;  
  14. import android.widget.AdapterView;  
  15. import android.widget.AdapterView.OnItemClickListener;  
  16. import android.widget.Button;  
  17. import android.widget.ImageView;  
  18. import android.widget.LinearLayout;  
  19. import android.widget.ListView;  
  20. import android.widget.TextView;  
  21. import android.widget.Toast;  
  22.   
  23. import com.knowhow.android.client.ui.adapter.FileAdapter;  
  24.   
  25. public class FileBrowserActivity extends KHActivity {  
  26.   
  27.     private List<String> items=null;  
  28.     private List<String> paths=null;  
  29.     private String rootPath="/sdcard/";  
  30.     private TextView mPath;  
  31.     private ListView list;    
  32.     private FileAdapter m_FileAdapter;  
  33.     private void getFileDir(String filePath){  
  34.   
  35.         File f=new File(filePath);   
  36.         if(f.exists() && f.canWrite()){  
  37.             mPath.setText(filePath);  
  38.             items=new ArrayList<String>();  
  39.             paths=new ArrayList<String>();  
  40.             File[] files=f.listFiles();  
  41.             if(!filePath.equals(rootPath)){  
  42.                 items.add("goroot");  
  43.                 paths.add(rootPath);  
  44.                 items.add("goparent");  
  45.                 paths.add(f.getParent());  
  46.             }  
  47.             for(int i=0;i<files.length;i++){  
  48.                 File file=files[i];  
  49.                 if(file.isDirectory()){  
  50.                     items.add(file.getName());  
  51.                     paths.add(file.getPath());  
  52.                 }  
  53.             }  
  54.             m_FileAdapter = new FileAdapter(this,items,paths);  
  55.             list.setAdapter(m_FileAdapter);  
  56.             list.setOnItemClickListener(new OnItemClickListener(){  
  57.                   
  58.                 @Override  
  59.                 public void onItemClick(AdapterView<?> parent, View view,int position, long id) {  
  60.                       
  61.                     if(items.get(position).toString().equals("goparent")){  
  62.                         getFileDir(paths.get(position));  
  63.                     }else if(items.get(position).toString().equals("goroot")){  
  64.                         getFileDir(paths.get(position));  
  65.                         return;  
  66.                     }else{  
  67.                         File file=new File(paths.get(position));  
  68.                         if(file.canWrite()){  
  69.                             if (file.isDirectory()){  
  70.                                 getFileDir(paths.get(position));  
  71.                             }  
  72.                         }else{  
  73.                             LinearLayout lay = new LinearLayout(FileBrowserActivity.this);  
  74.                             lay.setOrientation(LinearLayout.HORIZONTAL);  
  75.                             ImageView image = new ImageView(FileBrowserActivity.this);  
  76.                             TextView text = new TextView(FileBrowserActivity.this);  
  77.                             text.setTextColor(Color.RED);  
  78.                             text.setTextSize(20);  
  79.                             text.setText("很抱歉您的权限不足!");  
  80.                             Toast toast = Toast.makeText(FileBrowserActivity.this, text.getText().toString(), Toast.LENGTH_LONG);  
  81.                             image.setImageResource(android.R.drawable.stat_sys_warning);  
  82.                             lay.addView(image);  
  83.                             lay.addView(text);  
  84.                             toast.setView(lay);  
  85.                             toast.show();  
  86.                         }  
  87.                     }  
  88.                 }  
  89.             });  
  90.         }else{  
  91.             LinearLayout lay = new LinearLayout(FileBrowserActivity.this);  
  92.             lay.setOrientation(LinearLayout.HORIZONTAL);  
  93.             ImageView image = new ImageView(FileBrowserActivity.this);  
  94.             TextView text = new TextView(FileBrowserActivity.this);  
  95.             text.setTextColor(Color.RED);  
  96.             text.setTextSize(20);  
  97.             text.setText("无SD卡,无法完成下载!");  
  98.             Toast toast = Toast.makeText(FileBrowserActivity.this, text.getText().toString(), Toast.LENGTH_LONG);  
  99.             image.setImageResource(android.R.drawable.stat_sys_warning);  
  100.             lay.addView(image);  
  101.             lay.addView(text);  
  102.             toast.setView(lay);  
  103.             toast.show();  
  104.             this.finish();  
  105.         }  
  106.     }  
  107.   
  108.     @Override  
  109.     protected void onCreate(Bundle savedInstanceState) {  
  110.         super.onCreate(savedInstanceState);  
  111.         this.setContentView(R.layout.filelist);  
  112.         mPath = (TextView)this.findViewById(R.id.mPath);  
  113.         list = (ListView)this.findViewById(R.id.filelist);  
  114.         getFileDir(rootPath);  
  115.         mPath.setTextColor(this.getResources().getColor(R.color.text_color));  
  116.         this.setTitle("请选择保存目录:");  
  117.         Button ok = (Button)this.findViewById(R.id.fileok);  
  118.         ok.setPadding(0505);  
  119.         ok.setOnClickListener(new OnClickListener(){  
  120.             @Override  
  121.             public void onClick(View v) {  
  122.                 /*if(mPath.getText().toString().equals(rootPath)){ 
  123.                     LinearLayout lay = new LinearLayout(FileBrowserActivity.this); 
  124.                     lay.setOrientation(LinearLayout.HORIZONTAL); 
  125.                     ImageView image = new ImageView(FileBrowserActivity.this); 
  126.                     TextView text = new TextView(FileBrowserActivity.this); 
  127.                     text.setTextColor(FileBrowserActivity.this.getResources().getColor(R.color.text_color)); 
  128.                     text.setTextSize(16); 
  129.                     text.setText("很抱歉您的权限不足!"); 
  130.                     Toast toast = Toast.makeText(FileBrowserActivity.this, text.getText().toString(), Toast.LENGTH_SHORT); 
  131.                     image.setImageResource(android.R.drawable.stat_sys_warning); 
  132.                     lay.addView(image); 
  133.                     lay.addView(text); 
  134.                     toast.setView(lay); 
  135.                     toast.show(); 
  136.                 }else{*/  
  137.                     Intent i = new Intent();  
  138.                     Bundle b = new Bundle();    
  139.                     b.putString("savePath", mPath.getText().toString());    
  140.                     b.putString("url", FileBrowserActivity.this.getIntent().getStringExtra("url"));    
  141.                     b.putString("fileName", FileBrowserActivity.this.getIntent().getStringExtra("fileName"));    
  142.                     i.putExtras(b);  
  143.                     FileBrowserActivity.this.setResult(RESULT_OK, i);  
  144.                     FileBrowserActivity.this.finish();  
  145.                 //}  
  146.                   
  147.             }  
  148.         });  
  149.         Button cancel = (Button)this.findViewById(R.id.filecancel);  
  150.         cancel.setPadding(0505);  
  151.         cancel.setOnClickListener(new OnClickListener(){  
  152.             @Override  
  153.             public void onClick(View v) {  
  154.                 FileBrowserActivity.this.finish();  
  155.             }  
  156.         });  
  157.     }  
  158. }  
接下来看listview的layout文件以及FileAdapter.java

filelist.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent" android:layout_height="fill_parent"  
  4.     android:orientation="vertical" android:background="@drawable/white">  
  5.     <LinearLayout android:layout_width="fill_parent" android:gravity="center"  
  6.         android:layout_height="wrap_content" android:orientation="horizontal">  
  7.         <Button android:layout_weight="1.0" android:textColor="@color/button_text_color"  
  8.             android:textSize="16dip" android:background="@drawable/bg_alibuybutton_states"  
  9.             android:layout_height="wrap_content" android:layout_width="wrap_content"  
  10.             android:id="@+id/fileok"  
  11.             android:text="确定" />  
  12.         <Button android:layout_marginLeft="10dip"  
  13.             android:layout_weight="1.0" android:textColor="@color/button_text_color"  
  14.             android:textSize="16dip" android:background="@drawable/bg_alibuybutton_states"  
  15.             android:layout_height="wrap_content" android:layout_width="wrap_content"  
  16.             android:id="@+id/filecancel"   
  17.             android:text="取消"></Button>  
  18.     </LinearLayout>  
  19.     <TextView android:id="@+id/mPath" android:layout_width="wrap_content"  
  20.         android:layout_height="wrap_content" android:padding="5px"  
  21.         android:textSize="18sp" android:textColor="@drawable/blue" />  
  22.     <ListView android:id="@+id/filelist" android:layout_width="wrap_content"  
  23.         android:cacheColorHint="#00000000"  
  24.         android:layout_height="wrap_content" />  
  25. </LinearLayout>  

file_row.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout android:id="@+id/file_items"  
  3.     android:layout_width="fill_parent"   
  4.     xmlns:android="http://schemas.android.com/apk/res/android"  
  5.     android:layout_height="wrap_content"   
  6.     android:paddingBottom="4dip"  
  7.     android:paddingLeft="12dip"   
  8.     android:paddingRight="12dip">  
  9.   <ImageView android:id="@+id/fileicon"  
  10.     android:layout_height="wrap_content"  
  11.     android:textSize="26dip"  
  12.     android:layout_alignParentLeft="true"  
  13.     android:layout_width="wrap_content"  
  14.     android:layout_below="@+id/file_items"/>  
  15.   <TextView android:id="@+id/filetext"  
  16.     android:layout_gravity="center_vertical"  
  17.     android:layout_width="fill_parent"  
  18.     android:layout_toRightOf="@id/fileicon"  
  19.     android:paddingLeft="20dip"  
  20.     android:layout_height="wrap_content"/>  
  21.   <CheckBox android:id="@+id/file_check"   
  22.         style="?android:attr/starStyle"  
  23.         android:layout_height="wrap_content"   
  24.         android:layout_width="wrap_content"   
  25.         android:layout_alignParentRight="true"  
  26.         android:focusable="false"     
  27.         android:focusableInTouchMode="false"     
  28.         android:clickable="false"  
  29.         android:layout_below="@+id/file_items"/>  
  30. </RelativeLayout>  

FileAdapter.java

[java] view plaincopy
  1. package com.knowhow.android.client.ui.adapter;  
  2.   
  3. import java.io.File;  
  4. import java.util.ArrayList;  
  5. import java.util.HashMap;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import android.content.Context;  
  10. import android.graphics.Bitmap;  
  11. import android.graphics.BitmapFactory;  
  12. import android.view.LayoutInflater;  
  13. import android.view.View;  
  14. import android.view.ViewGroup;  
  15. import android.widget.BaseAdapter;  
  16. import android.widget.CheckBox;  
  17. import android.widget.ImageView;  
  18. import android.widget.TextView;  
  19.   
  20. import com.knowhow.android.client.R;  
  21.   
  22. public class FileAdapter extends BaseAdapter{  
  23.   
  24.     private LayoutInflater mInflater;  
  25.     private Bitmap mIcon1;  
  26.     private Bitmap mIcon2;  
  27.     private Bitmap mIcon3;  
  28.     private Bitmap mIcon4;  
  29.     private List<String> items;  
  30.     private List<String> paths;  
  31.     private Map<Integer, Boolean> isSelected;  
  32.     private Map<Integer, Integer> isVisibility;  
  33.     public Map<Integer, Integer> getIsVisibility() {  
  34.         return isVisibility;  
  35.     }  
  36.   
  37.     private List<ViewHolder> VHs = new ArrayList<ViewHolder>();  
  38.     private Context context;  
  39.   
  40.     public Map<Integer, Boolean> getIsSelected() {  
  41.         return isSelected;  
  42.     }  
  43.   
  44.     public void setIsSelected(Map<Integer, Boolean> isSelected) {  
  45.         this.isSelected = isSelected;  
  46.     }  
  47.   
  48.     public FileAdapter(Context context,List<String> it,List<String> pa){  
  49.           
  50.         this.context = context;  
  51.         mInflater = LayoutInflater.from(context);  
  52.         if( it != null && it.size() > 0){  
  53.             isSelected = new HashMap<Integer, Boolean>();  
  54.             isVisibility = new HashMap<Integer, Integer>();  
  55.             for (int i = 0; i < it.size(); i++) {      
  56.                 isSelected.put(i, false);  
  57.                 isVisibility.put(i, View.GONE);  
  58.             }  
  59.         }  
  60.         items = it;  
  61.         paths = pa;  
  62.         mIcon1 = BitmapFactory.decodeResource(context.getResources(),  
  63.                 R.drawable.backroot);  
  64.         mIcon2 = BitmapFactory.decodeResource(context.getResources(),  
  65.                 R.drawable.backparent);  
  66.         mIcon3 = BitmapFactory.decodeResource(context.getResources(),  
  67.                 R.drawable.folder);  
  68.         mIcon4 = BitmapFactory.decodeResource(context.getResources(),  
  69.                 R.drawable.doc);  
  70.     }  
  71.   
  72.     @Override  
  73.     public int getCount(){  
  74.         return items.size();  
  75.     }  
  76.   
  77.     @Override  
  78.     public Object getItem(int position){  
  79.         return items.get(position);  
  80.     }  
  81.   
  82.     @Override  
  83.     public long getItemId(int position){  
  84.         return position;  
  85.     }  
  86.   
  87.     @Override  
  88.     public View getView(int position,View convertView,ViewGroup parent){  
  89.         ViewHolder holder;  
  90.   
  91.         if(convertView == null){  
  92.             convertView = mInflater.inflate(R.layout.file_row, null);  
  93.             holder = new ViewHolder();  
  94.             VHs.add(holder);  
  95.             holder.text = (TextView) convertView.findViewById(R.id.filetext);  
  96.             holder.text.setTextColor(context.getResources().getColor(R.color.text_color));  
  97.             holder.icon = (ImageView) convertView.findViewById(R.id.fileicon);  
  98.             holder.cBox = (CheckBox) convertView.findViewById(R.id.file_check);  
  99.             convertView.setTag(holder);  
  100.         }else{  
  101.             holder = (ViewHolder) convertView.getTag();  
  102.         }  
  103.         File f=new File(paths.get(position).toString());  
  104.         if(items.get(position).toString().equals("goroot")){  
  105.             holder.text.setText("返回根目录");  
  106.             holder.icon.setImageBitmap(mIcon1);  
  107.             holder.cBox.setChecked(isSelected.get(position));  
  108.             holder.cBox.setVisibility(isVisibility.get(position));  
  109.         }else if(items.get(position).toString().equals("goparent")){  
  110.             holder.text.setText("返回上一级");  
  111.             holder.icon.setImageBitmap(mIcon2);  
  112.             holder.cBox.setChecked(isSelected.get(position));  
  113.             holder.cBox.setVisibility(isVisibility.get(position));  
  114.         }else{  
  115.             holder.text.setText(f.getName());  
  116.             if(f.isDirectory()){  
  117.                 holder.icon.setImageBitmap(mIcon3);  
  118.                 holder.cBox.setChecked(isSelected.get(position));  
  119.                 holder.cBox.setVisibility(isVisibility.get(position));  
  120.             }else{  
  121.                 holder.icon.setImageBitmap(mIcon4);  
  122.                 holder.cBox.setChecked(isSelected.get(position));  
  123.                 holder.cBox.setVisibility(isVisibility.get(position));  
  124.             }  
  125.         }  
  126.         return convertView;  
  127.     }  
  128.   
  129.     public List<ViewHolder> getVHs() {  
  130.         return VHs;  
  131.     }  
  132.   
  133.     public final class ViewHolder  
  134.     {  
  135.         public TextView text;  
  136.         public ImageView icon;  
  137.         public CheckBox cBox;  
  138.     }  
  139. }  

以上就是所有代码,文件夹以及文件的图片可以自己找,因为我不能上传图片所以,这2个文件以及效果图我会后续补上。(几天之后)

亲们可以根据自己的需要扩展 文件选择(多选或者单选都可以)如果需要我帮忙别客气。

原文地址:点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值