Android 选择文件

如果需要让用户选择文件,可以使用如下方法将SD卡上的文件显示到一个ListActivity供用户选择。

 

1 定义个一个方法,可以得到一个路径下所有的文件和文件夹,并对其排序,使文件在文件夹后面,并将结果传到一个ListView的Adapter构造方法中:

public void getFiles(String path){
		tv.setText(path);
		File f=new File(path);
		//得到所有子文件和文件夹
		File[] tem=f.listFiles();
		//如果当前的目录不是在顶层目录,就把父目录要到files数组中的第一个
		if(!path.equals(root)){
			files=new File[tem.length+1];
			System.arraycopy(tem, 0, files, 1, tem.length);
			files[0]=f.getParentFile();
		}else{
			files=tem;
		}
		sortFilesByDirectory(files);
		//为ListActivity设置Adapter
		setListAdapter(new Adapter(this, files,files.length==tem.length));
	}

其中排序方法的代码如下:

	
	//对文件进行排序
	private void sortFilesByDirectory(File[] files) {
		Arrays.sort(files, new Comparator<File>() {
			public int compare(File f1, File f2) {
				return Long.valueOf(f1.length()).compareTo(f2.length());
			}
		});
	}

2 定义一个ListView的Adapter继承BaseAdapter,构造方法接受三个参数:Context(上下文), File[](要显示的文件),boolean(是否为顶层目录):

public Adapter(Context context,File[] files, boolean istop) {
		this.context=context;
		this.files = files;
		this.istop = istop;
	}

Adapter中getView的方法如下:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Holder holder=null;
        if(convertView==null){
            holder=new Holder();
            convertView=View.inflate(context, R.layout.adapter, null);
            holder.iv=(ImageView) convertView.findViewById(R.id.adapter_icon);
            holder.tv=(TextView) convertView.findViewById(R.id.adapter_txt);
            convertView.setTag(holder);
        }else{
            holder=(Holder) convertView.getTag();
        }
        //设置convertView中控件的值
        setconvertViewRow( position, holder);
        return convertView;
    }

其中Holder类定义:

	class Holder{
		private ImageView iv;
		private TextView tv;
	}

setconvertViewRow方法定义如下:

private void setconvertViewRow(int position,Holder holder ){
		File f=files[position];
		holder.tv.setText(f.getName());
		if(!istop && position==0){//不是在顶层目录
			//加载后退图标
			holder.iv.setImageResource(R.drawable.back);
		}else if(f.isFile()){//是文件
			//加载文件图标
			holder.iv.setImageResource(R.drawable.file);
		}else{//文件夹
			//加载文件夹图标
			holder.iv.setImageResource(R.drawable.dir);
		}
	}

3  在程序开始的时候就可以调用getFiles方法,传入参数“/sdcard”就可以拉,结果如下:




下载代码


### 回答1: Delphi是一款用于开发跨平台应用程序的集成开发环境(IDE),它支持使用Object Pascal语言编写应用程序。在Delphi中,我们可以利用一些库和组件来实现Android选择文件对话框的功能。 要在Delphi中实现Android选择文件对话框功能,我们可以使用TOpenDialog组件,该组件允许用户选择一个或多个文件。首先,我们需要在Delphi中创建一个新的Android应用程序项目。 然后,在项目中添加一个TButton按钮和一个TOpenDialog组件。调整按钮的属性,如位置和文本等。接下来,我们需要在按钮的OnClick事件中添加一些代码来触发选择文件对话框。 在OnClick事件中,我们将使用TOpenDialog的Execute方法来显示选择文件对话框,并等待用户选择文件。一旦用户选择文件,我们就可以使用TOpenDialog的FileName属性获取用户选择文件名。 接下来,我们可以使用该文件名来执行一些操作,例如读取文件内容或处理文件数据。最后,我们可以将文件名显示在应用程序界面的某个位置,以便用户知道选择了哪个文件。 需要注意的是,在使用TOpenDialog组件之前,我们需要在项目设置中配置相应的权限,以允许应用程序访问设备上的文件系统。 总结起来,实现Delphi Android选择文件对话框的功能,我们需要创建一个TOpenDialog组件,并在按钮的OnClick事件中调用该组件的Execute方法来显示选择文件对话框。一旦用户选择文件,我们可以使用FileName属性获取文件名,并使用该文件名进行后续操作。 ### 回答2: Delphi是一种强大的开发工具,可以用于开发Android应用。在Delphi中,有一个方便的组件可以用来创建选择文件对话框,让用户能够选择他们的文件。 要创建该对话框,可以使用TOpenDialog组件。首先,在设计界面中找到该组件,然后将其拖放到你的Android应用的表单上。 接下来,你需要在代码中设置TOpenDialog的一些属性。这些属性包括Filter,Title和Options。Filter属性用来设置文件的类型和筛选器,Title属性用于设置对话框的标题,Options属性用于设置对话框的行为选项。 要弹出对话框并获取用户选择文件,可以调用TOpenDialog组件的Execute方法。当用户选择文件后,对话框会报告选择文件名。你可以使用SelectedFiles属性来获取选定的文件。如果用户取消了选择,SelectedFiles属性将为空。 这是一个简单的示例代码: ```Delphi procedure TForm1.Button1Click(Sender: TObject); var OpenDialog: TOpenDialog; SelectedFile: string; begin OpenDialog := TOpenDialog.Create(nil); try OpenDialog.Filter := '文本文件|*.txt|所有文件|*.*'; OpenDialog.Title := '选择文件'; if OpenDialog.Execute then begin SelectedFile := OpenDialog.SelectedFiles[0]; ShowMessage('选择文件是:' + SelectedFile); end else begin ShowMessage('取消选择'); end; finally OpenDialog.Free; end; end; ``` 在这个例子中,我们创建了一个TOpenDialog实例,并设置了筛选器和标题。然后,我们调用Execute方法来显示对话框,并根据用户的选择进行相应的操作。如果用户选择文件,我们获取选择文件路径,并在消息框中显示它。如果用户取消了选择,我们显示一个取消选择的消息。 这就是使用Delphi Android选择文件对话框的简单示例。希望对你有帮助! ### 回答3: 在Delphi中,如果需要在Android应用程序中实现选择文件对话框,可以使用TOpenDialog组件或Android内置的文件选择器。 1. 使用TOpenDialog组件: a. 在Delphi中创建一个新的Android应用程序项目。 b. 在设计时,选择“Standard”标签页,并将TButton和TOpenDialog组件拖放到窗体上。 c. 双击按钮,编写OnClick事件的代码,打开对话框并获取选定的文件。 代码示例: ```Delphi uses Androidapi.Helpers, Androidapi.JNI.JavaTypes; procedure TForm1.Button1Click(Sender: TObject); var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_OPEN_DOCUMENT); Intent.addCategory(TJIntent.JavaClass.CATEGORY_OPENABLE); Intent.setType('application/*'); //限定文件类型,如果不指定,可选择任意文件类型 if Intent.resolveActivity(MainActivity.getPackageManager) <> nil then MainActivity.startActivityForResult(Intent, 1); end; ``` d. 在窗体的OnActivityResult事件中获取选中文件的路径。 代码示例: ```Delphi uses Androidapi.JNI.GraphicsContentViewText; procedure TForm1.FormActivityResult(requestCode, resultCode: Integer; data: JIntent); begin if resultCode = TJActivity.JavaClass.RESULT_OK then ShowMessage(JStringToString(data.getDataString)); end; ``` 2. 使用Android内置的文件选择器: a. 在Delphi中创建一个新的Android应用程序项目。 b. 在设计时,选择“Standard”标签页,并将TButton组件拖放到窗体上。 c. 双击按钮,编写OnClick事件的代码,打开Android内置的文件选择器并获取选定的文件。 代码示例: ```Delphi uses Androidapi.Helpers, Androidapi.JNI.JavaTypes; procedure TForm1.Button1Click(Sender: TObject); var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_GET_CONTENT); Intent.setType('*/*'); //限定文件类型,如果不指定,可选择任意文件类型 if Intent.resolveActivity(MainActivity.getPackageManager) <> nil then MainActivity.startActivityForResult(Intent, 1); end; ``` d. 在窗体的OnActivityResult事件中获取选中文件的路径。 代码示例: ```Delphi uses Androidapi.JNI.GraphicsContentViewText; procedure TForm1.FormActivityResult(requestCode, resultCode: Integer; data: JIntent); var Uri: Jnet_Uri; Cursor: JCursor; FilePath: string; begin if resultCode = TJActivity.JavaClass.RESULT_OK then begin Uri := data.getData; Cursor := TAndroidHelper.ContentResolver.query(Uri, nil, nil, nil, nil); if Cursor.moveToFirst then FilePath := JStringToString(Cursor.getString(Cursor.getColumnIndexOrThrow(TJOpenableColumns.JavaClass.DISPLAY_NAME))); Cursor.close; ShowMessage(FilePath); end; end; ``` 以上是使用Delphi实现Android选择文件对话框的两种方法,根据需要选择其中一种。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值