`
Weich_JavaDeveloper
  • 浏览: 100051 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

文件浏览+文件选择

 
阅读更多

FileBrowser.java

public class FileBrowser {

	private Context context;
	private List<String> items=null;
	private List<String> paths=null;
	private String rootPath="/";
	private TextView mPath;
	private View view;
	private ListView list;
	private FileAdapter m_FileAdapter;
	private String selectedFilePath = "";

	public String getSelectedFilePath() {
		return selectedFilePath;
	}

	public void setSelectedFilePath(String selectedFilePath) {
		this.selectedFilePath = selectedFilePath;
	}

	public View getFileListView(){
		return view;
	}


	public FileBrowser(Context context){
		this.context = context;
		LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
		view = inflater.inflate(R.layout.filelist, null);
		mPath = (TextView)view.findViewById(R.id.mPath);
		mPath.setTextColor(context.getResources().getColor(R.color.text_color));
		list = (ListView)view.findViewById(R.id.filelist);
		getFileDir(rootPath);
	}

	private void getFileDir(String filePath){

		mPath.setText(filePath);
		items=new ArrayList<String>();
		paths=new ArrayList<String>();
		File f=new File(filePath);  
		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];
			items.add(file.getName());
			paths.add(file.getPath());
		}

		m_FileAdapter = new FileAdapter(context,items,paths);
		list.setAdapter(m_FileAdapter);
		list.setOnItemClickListener(new OnItemClickListener(){

			@Override
			public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

				File file=new File(paths.get(position));
				if(file.canRead()){
					if (file.isDirectory()){
						getFileDir(paths.get(position));
					}else{
						ViewHolder vHollder = (ViewHolder) view.getTag();
						for(ViewHolder v : m_FileAdapter.getVHs()){
							v.cBox.setChecked(false);
							v.cBox.setVisibility(View.GONE);
						}
						for(int i : m_FileAdapter.getIsSelected().keySet()){
							m_FileAdapter.getIsSelected().put(i, false);
						}
						for(int i : m_FileAdapter.getIsVisibility().keySet()){
							m_FileAdapter.getIsVisibility().put(i, View.GONE);
						}
						vHollder.cBox.setVisibility(View.VISIBLE);
						m_FileAdapter.getIsVisibility().put(position, View.VISIBLE);
						vHollder.cBox.setChecked(true);
						m_FileAdapter.getIsSelected().put(position, vHollder.cBox.isChecked());
						if(mPath.getText().toString().equals(rootPath)){
							setSelectedFilePath(mPath.getText().toString() + vHollder.text.getText().toString());
						}else{
							setSelectedFilePath(mPath.getText().toString() + File.separator + vHollder.text.getText().toString());
						}
						Toast.makeText(context, getSelectedFilePath(), Toast.LENGTH_SHORT).show();
					}
				}else{
					LinearLayout lay = new LinearLayout(context);
					lay.setOrientation(LinearLayout.HORIZONTAL);
					ImageView image = new ImageView(context);
					TextView text = new TextView(context);
					text.setTextColor(context.getResources().getColor(R.color.text_color));
					text.setTextSize(16);
					text.setText("很抱歉您的权限不足,无法读取文件内容!");
					Toast toast = Toast.makeText(context, text.getText().toString(), Toast.LENGTH_SHORT);
					image.setImageResource(android.R.drawable.ic_lock_idle_alarm);
					lay.addView(image);
					lay.addView(text);
					toast.setView(lay);
					toast.show();
				}
			}
		});
	}
}

 FileAdapter.java

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

 file_row.xml(layout)

<?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>
 
分享到:
评论

相关推荐

    AndServer实现文件下载+文件浏览服务

    AndServer是一款轻量级、高性能的Android HTTP服务器框架,它允许开发者在Android设备上搭建自己的Web服务,从而实现各种功能,比如文件下载和文件浏览。本文将深入探讨AndServer如何实现这两个关键特性,并提供相关...

    android SD卡上文本文件浏览选择器 勾选文件返回路径

    标题提到的"android SD卡上文本文件浏览选择器 勾选文件返回路径"就是这样一个功能,它允许用户在SD卡中查找并选择多个TXT文件,然后获取所选文件的路径以便进一步处理。 首先,我们要实现自动扫描SD卡上的所有TXT...

    C#操作帮助文件实例+源代码

     C#操作帮助文件的一个演示实例源代码,可以浏览帮助文件、启动帮助索引、选择帮助文件类型、设置参数启动帮助文件等小功能,其实这个功能是挺实用的,一个成型的软件,不可能没有使用帮助的,这也是完善软件服务的...

    文件浏览 打开sdcard文件夹。只显示文件夹和txt文件。过滤非txt文件。选择txt文件返回其名字。

    在Android系统中,"文件浏览"是一个常见的功能,允许用户查看和操作存储设备上的文件。在给定的标题和描述中,重点在于打开SD卡(Secondary Storage Device,即外部存储)文件夹,并且只显示文件夹和TXT文本文件,...

    文件上传+进度条显示

    4. **AJAX异步上传**:为了提供更好的用户体验,文件通常使用AJAX进行异步上传,这样用户可以在上传过程中继续浏览其他页面内容,而不会阻塞浏览器。 5. **进度条显示**:使用HTML5的`FileReader` API,可以读取...

    文件浏览器+简易计算器(java)

    【标题】"文件浏览器+简易计算器(java)"是一个基于Java编程语言开发的项目,它集成了文件浏览功能和一个基础的计算器应用。这个项目旨在提供一个用户友好的界面,让用户能够轻松地浏览本地文件系统,并进行简单的...

    android 文件浏览选择 FileOpenerDialog

    调用方啊 FileOpenerDialog dlg = new FileOpenerDialog(MailDetaiAct.this, 2, fileType, path, MailDetaiAct.this); dlg.setTitle("选择附件");...文件选择dialog在关闭时会回调 OnOkClick 方法

    CAD文件浏览控件(浏览DWG文件等)

    CAD文件浏览控件是软件开发中的一个重要工具,主要用于在应用程序中查看和操作CAD(计算机辅助设计)文件,尤其是DWG格式的文件。DWG(Drawing)是Autodesk公司的AutoCAD软件所使用的默认文件格式,广泛应用于工程...

    WPF控件 文件路径选择、文件夹选择

    在描述中提到的"文件路径选择"和"文件夹选择"是两个常见的功能,通常用于让用户在应用程序中指定文件或目录。本文将深入探讨如何在WPF中实现这两个功能。 首先,我们来讨论“文件路径选择”。在WPF中,我们可以使用...

    VB 文件夹浏览选择控件.rar_-baijiahao_VB文件浏览_VB浏览器_VB浏览文件_文件浏览器

    标签中的“-baijiahao”可能是发布者的标识或某种分类标记,而其他标签如“vb文件浏览”,“vb浏览器”,“vb浏览文件”,“文件浏览器”进一步强调了这个控件的核心功能,即在VB环境中提供文件和文件夹的浏览能力。...

    Unity调用Android文件资源管理选择文件

    Unity 调用Android文件资源管理器,可以选择Android手机上的图片,视频等一些列文件,并且获得相关的文件路径。直接导入Unity即可运行。测试已经通过

    VB 浏览并选择文件夹

    像浏览文件一样浏览文件夹,能够选择文件夹。写成了一个函数放在了模块里。函数返回选择文件夹的路径。

    Kotlin RecyclerView使用,浏览相册、选择图片上传,下载文件,文件选择器

    在本项目中,我们探讨了如何利用Kotlin与RecyclerView相结合,实现一系列实用功能,如浏览相册、选择图片上传以及文件操作。以下将详细介绍这些知识点。 首先,`RecyclerView`是一个高效的视图复用组件,它通过...

    基于Spring Boot、AngularJS、CSS3、HTML5的响应式文件浏览管理器

    基于Spring Boot、AngularJS、CSS3、HTML5的响应式文件浏览管理器 功能介绍: 前后端分离,方便集成到自己的熟悉语言项目中 支持选择回调,如弹框文件选择 多语言支持 支持多种文件列表布局(图标/详细列表) 多文件...

    NotePad++的nppftp文件

    你可以通过这个界面浏览、打开、编辑、下载、上传文件,甚至进行重命名和删除操作。NppFTP的一个亮点是,当你编辑远程文件并保存时,它会自动同步到服务器上,无需手动上传,这在处理实时性要求高的项目时非常方便。...

    struts2+jquery+ajax文件异步上传

    在文件上传中,Ajax实现了用户选择文件后,文件在后台上传,用户可以继续浏览其他页面内容,而无需等待上传完成。这需要用到XMLHttpRequest对象或者利用jQuery提供的Ajax方法。 在实际应用中,文件上传通常需要处理...

    keil u3添加STC10 11 12 15 90等系列单片机头文件方法+库文件.zip

    - 将解压后的头文件夹添加到新建的源文件组中,右键点击文件夹,选择“Add Files to Group”,然后浏览找到STC头文件夹中的所有.h文件。 - 对于库文件,同样方法将其添加到源文件组中,通常是.lib或.c文件。 5. *...

    Android-FileBrowser-FilePicker,Android的文件浏览器/文件选择器,可以集成到应用程序中,从内部/外部存储中浏览/选择文件.zip

    Android的文件浏览器/文件选择器,可以集成到应用程序中,从内部/外部存储中浏览/选择文件。

    AutoJs源码-文件选择器

    AutoJs源码-文件选择器。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!。3...

    Uploadify无刷新上传文件+预览

    【标题】"Uploadify无刷新上传文件+预览"是一个基于JavaScript和Flash技术的文件上传解决方案,它允许用户在不刷新整个页面的情况下上传文件,并且支持预览功能,提升了用户体验。 【描述】"可实现无刷新上传文件到...

Global site tag (gtag.js) - Google Analytics