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

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

首先看FileBrowserActivity.java

package com.knowhow.android.client; import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.knowhow.android.client.ui.adapter.FileAdapter; public class FileBrowserActivity extends KHActivity { private List<String> items=null; private List<String> paths=null; private String rootPath="/sdcard/"; private TextView mPath; private ListView list; private FileAdapter m_FileAdapter; private void getFileDir(String filePath){ File f=new File(filePath); if(f.exists() && f.canWrite()){ mPath.setText(filePath); items=new ArrayList<String>(); paths=new ArrayList<String>(); File[] files=f.listFiles(); if(!filePath.equals(rootPath)){ items.add("goroot"); paths.add(rootPath); items.add("goparent"); paths.add(f.getParent()); } for(int i=0;i<files.length;i++){ File file=files[i]; if(file.isDirectory()){ items.add(file.getName()); paths.add(file.getPath()); } } m_FileAdapter = new FileAdapter(this,items,paths); list.setAdapter(m_FileAdapter); list.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view,int position, long id) { if(items.get(position).toString().equals("goparent")){ getFileDir(paths.get(position)); }else if(items.get(position).toString().equals("goroot")){ getFileDir(paths.get(position)); return; }else{ File file=new File(paths.get(position)); if(file.canWrite()){ if (file.isDirectory()){ getFileDir(paths.get(position)); } }else{ LinearLayout lay = new LinearLayout(FileBrowserActivity.this); lay.setOrientation(LinearLayout.HORIZONTAL); ImageView image = new ImageView(FileBrowserActivity.this); TextView text = new TextView(FileBrowserActivity.this); text.setTextColor(Color.RED); text.setTextSize(20); text.setText("很抱歉您的权限不足!"); Toast toast = Toast.makeText(FileBrowserActivity.this, text.getText().toString(), Toast.LENGTH_LONG); image.setImageResource(android.R.drawable.stat_sys_warning); lay.addView(image); lay.addView(text); toast.setView(lay); toast.show(); } } } }); }else{ LinearLayout lay = new LinearLayout(FileBrowserActivity.this); lay.setOrientation(LinearLayout.HORIZONTAL); ImageView image = new ImageView(FileBrowserActivity.this); TextView text = new TextView(FileBrowserActivity.this); text.setTextColor(Color.RED); text.setTextSize(20); text.setText("无SD卡,无法完成下载!"); Toast toast = Toast.makeText(FileBrowserActivity.this, text.getText().toString(), Toast.LENGTH_LONG); image.setImageResource(android.R.drawable.stat_sys_warning); lay.addView(image); lay.addView(text); toast.setView(lay); toast.show(); this.finish(); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.filelist); mPath = (TextView)this.findViewById(R.id.mPath); list = (ListView)this.findViewById(R.id.filelist); getFileDir(rootPath); mPath.setTextColor(this.getResources().getColor(R.color.text_color)); this.setTitle("请选择保存目录:"); Button ok = (Button)this.findViewById(R.id.fileok); ok.setPadding(0, 5, 0, 5); ok.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { /*if(mPath.getText().toString().equals(rootPath)){ LinearLayout lay = new LinearLayout(FileBrowserActivity.this); lay.setOrientation(LinearLayout.HORIZONTAL); ImageView image = new ImageView(FileBrowserActivity.this); TextView text = new TextView(FileBrowserActivity.this); text.setTextColor(FileBrowserActivity.this.getResources().getColor(R.color.text_color)); text.setTextSize(16); text.setText("很抱歉您的权限不足!"); Toast toast = Toast.makeText(FileBrowserActivity.this, text.getText().toString(), Toast.LENGTH_SHORT); image.setImageResource(android.R.drawable.stat_sys_warning); lay.addView(image); lay.addView(text); toast.setView(lay); toast.show(); }else{*/ Intent i = new Intent(); Bundle b = new Bundle(); b.putString("savePath", mPath.getText().toString()); b.putString("url", FileBrowserActivity.this.getIntent().getStringExtra("url")); b.putString("fileName", FileBrowserActivity.this.getIntent().getStringExtra("fileName")); i.putExtras(b); FileBrowserActivity.this.setResult(RESULT_OK, i); FileBrowserActivity.this.finish(); //} } }); Button cancel = (Button)this.findViewById(R.id.filecancel); cancel.setPadding(0, 5, 0, 5); cancel.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { FileBrowserActivity.this.finish(); } }); } } 接下来看listview的layout文件以及FileAdapter.java

filelist.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@drawable/white"> <LinearLayout android:layout_width="fill_parent" android:gravity="center" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_weight="1.0" android:textColor="@color/button_text_color" android:textSize="16dip" android:background="@drawable/bg_alibuybutton_states" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/fileok" android:text="确定" /> <Button android:layout_marginLeft="10dip" android:layout_weight="1.0" android:textColor="@color/button_text_color" android:textSize="16dip" android:background="@drawable/bg_alibuybutton_states" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/filecancel" android:text="取消"></Button> </LinearLayout> <TextView android:id="@+id/mPath" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5px" android:textSize="18sp" android:textColor="@drawable/blue" /> <ListView android:id="@+id/filelist" android:layout_width="wrap_content" android:cacheColorHint="#00000000" android:layout_height="wrap_content" /> </LinearLayout>
file_row.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/file_items" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:paddingBottom="4dip" android:paddingLeft="12dip" android:paddingRight="12dip"> <ImageView android:id="@+id/fileicon" android:layout_height="wrap_content" android:textSize="26dip" android:layout_alignParentLeft="true" android:layout_width="wrap_content" android:layout_below="@+id/file_items"/> <TextView android:id="@+id/filetext" android:layout_gravity="center_vertical" android:layout_width="fill_parent" android:layout_toRightOf="@id/fileicon" android:paddingLeft="20dip" android:layout_height="wrap_content"/> <CheckBox android:id="@+id/file_check" style="?android:attr/starStyle" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:focusable="false" android:focusableInTouchMode="false" android:clickable="false" android:layout_below="@+id/file_items"/> </RelativeLayout>
FileAdapter.java

package com.knowhow.android.client.ui.adapter; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import com.knowhow.android.client.R; public class FileAdapter extends BaseAdapter{ private LayoutInflater mInflater; private Bitmap mIcon1; private Bitmap mIcon2; private Bitmap mIcon3; private Bitmap mIcon4; private List<String> items; private List<String> paths; private Map<Integer, Boolean> isSelected; private Map<Integer, Integer> isVisibility; public Map<Integer, Integer> getIsVisibility() { return isVisibility; } private List<ViewHolder> VHs = new ArrayList<ViewHolder>(); private Context context; public Map<Integer, Boolean> getIsSelected() { return isSelected; } public void setIsSelected(Map<Integer, Boolean> isSelected) { this.isSelected = isSelected; } public FileAdapter(Context context,List<String> it,List<String> pa){ this.context = context; mInflater = LayoutInflater.from(context); if( it != null && it.size() > 0){ isSelected = new HashMap<Integer, Boolean>(); isVisibility = new HashMap<Integer, Integer>(); for (int i = 0; i < it.size(); i++) { isSelected.put(i, false); isVisibility.put(i, View.GONE); } } items = it; paths = pa; mIcon1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.backroot); mIcon2 = BitmapFactory.decodeResource(context.getResources(), R.drawable.backparent); mIcon3 = BitmapFactory.decodeResource(context.getResources(), R.drawable.folder); mIcon4 = BitmapFactory.decodeResource(context.getResources(), R.drawable.doc); } @Override public int getCount(){ return items.size(); } @Override public Object getItem(int position){ return items.get(position); } @Override public long getItemId(int position){ return position; } @Override public View getView(int position,View convertView,ViewGroup parent){ ViewHolder holder; if(convertView == null){ convertView = mInflater.inflate(R.layout.file_row, null); holder = new ViewHolder(); VHs.add(holder); holder.text = (TextView) convertView.findViewById(R.id.filetext); holder.text.setTextColor(context.getResources().getColor(R.color.text_color)); holder.icon = (ImageView) convertView.findViewById(R.id.fileicon); holder.cBox = (CheckBox) convertView.findViewById(R.id.file_check); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } File f=new File(paths.get(position).toString()); if(items.get(position).toString().equals("goroot")){ holder.text.setText("返回根目录"); holder.icon.setImageBitmap(mIcon1); holder.cBox.setChecked(isSelected.get(position)); holder.cBox.setVisibility(isVisibility.get(position)); }else if(items.get(position).toString().equals("goparent")){ holder.text.setText("返回上一级"); holder.icon.setImageBitmap(mIcon2); holder.cBox.setChecked(isSelected.get(position)); holder.cBox.setVisibility(isVisibility.get(position)); }else{ holder.text.setText(f.getName()); if(f.isDirectory()){ holder.icon.setImageBitmap(mIcon3); holder.cBox.setChecked(isSelected.get(position)); holder.cBox.setVisibility(isVisibility.get(position)); }else{ holder.icon.setImageBitmap(mIcon4); holder.cBox.setChecked(isSelected.get(position)); holder.cBox.setVisibility(isVisibility.get(position)); } } return convertView; } public List<ViewHolder> getVHs() { return VHs; } public final class ViewHolder { public TextView text; public ImageView icon; public CheckBox cBox; } }
以上就是所有代码,文件夹以及文件的图片可以自己找,因为我不能上传图片所以,这2个文件以及效果图我会后续补上。(几天之后)

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



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值