非常简单的Android打开和保存对话框功能
在Android上没有标准的打开和另存为对话框。在本代码中,我将详细描述一个非常简单的打开和保存对话框实现过程,对于Android初学者来说非常有用,对话框都是全屏活动的。
主要功能:
1、访问任何目录的SD卡
2、递归访问文件夹
3、单一文件选择
4、通过按硬件后退按钮升级
5、确认文件选择OK按钮
activity_open_file.xml
<LinearLayoutxmlns:android="<ahref="http://schemas.android.com/apk/res/android""rel="nofollow"target="_blank">http://schemas.android.com/apk/res/android"</a> xmlns:tools="<ahref="http://schemas.android.com/tools""rel="nofollow"target="_blank">http://schemas.android.com/tools"</a> android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/LvList" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> </ListView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/BtnOK" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="OK"/> <Button android:id="@+id/BtnCancel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Cancel"/> </LinearLayout> </LinearLayout>
OpenFileActivity.java
packagecom.example.androidfiledialogs;
importjava.io.File;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.Comparator;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.view.Menu;
importandroid.view.MenuItem;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.AdapterView;
importandroid.widget.AdapterView.OnItemClickListener;
importandroid.widget.AdapterView.OnItemLongClickListener;
importandroid.widget.AdapterView.OnItemSelectedListener;
importandroid.widget.ArrayAdapter;
importandroid.widget.Button;
importandroid.widget.ListView;
importandroid.widget.Spinner;
importandroid.widget.Toast;
publicclassOpenFileActivityextendsActivity
implementsOnClickListener,OnItemClickListener{
ListViewLvList;
ArrayList<String>listItems=newArrayList<String>();
ArrayAdapter<String>adapter;
ButtonBtnOK;
ButtonBtnCancel;
StringcurrentPath=null;
StringselectedFilePath=null;/*Fullpath,i.e./mnt/sdcard/folder/file.txt*/
StringselectedFileName=null;/*FileNameOnly,i.efile.txt*/
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_open_file);
try{
/*InitializingWidgets*/
LvList=(ListView)findViewById(R.id.LvList);
BtnOK=(Button)findViewById(R.id.BtnOK);
BtnCancel=(Button)findViewById(R.id.BtnCancel);
/*InitializingEventHandlers*/
LvList.setOnItemClickListener(this);
BtnOK.setOnClickListener(this);
BtnCancel.setOnClickListener(this);
//
setCurrentPath(Environment.getExternalStorageDirectory().getAbsolutePath()+"/");
}catch(Exceptionex){
Toast.makeText(this,
"ErrorinOpenFileActivity.onCreate:"+ex.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
voidsetCurrentPath(Stringpath){
ArrayList<String>folders=newArrayList<String>();
ArrayList<String>files=newArrayList<String>();
currentPath=path;
FileallEntries=newFile(path).listFiles();
for(inti=0;i<allEntries.length;i++){
if(allEntries.isDirectory()){
folders.add(allEntries.getName());
}elseif(allEntries.isFile()){
files.add(allEntries.getName());
}
}
Collections.sort(folders,newComparator<String>(){
@Override
publicintcompare(Strings1,Strings2){
returns1.compareToIgnoreCase(s2);
}
});
Collections.sort(files,newComparator<String>(){
@Override
publicintcompare(Strings1,Strings2){
returns1.compareToIgnoreCase(s2);
}
});
listItems.clear();
for(inti=0;i<folders.size();i++){
listItems.add(folders.get(i)+"/");
}
for(inti=0;i<files.size();i++){
listItems.add(files.get(i));
}
adapter=newArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
listItems);
adapter.notifyDataSetChanged();
LvList.setAdapter(adapter);
}
@Override
publicvoidonBackPressed()
{
if(!currentPath.equals(Environment.getExternalStorageDirectory().getAbsolutePath()+"/")){
setCurrentPath(newFile(currentPath).getParent()+"/");
}else{
super.onBackPressed();
}
}
@Override
publicvoidonClick(Viewv){
Intentintent;
switch(v.getId()){
caseR.id.BtnOK:
intent=newIntent();
intent.putExtra("fileName",selectedFilePath);
intent.putExtra("shortFileName",selectedFileName);
setResult(RESULT_OK,intent);
this.finish();
break;
caseR.id.BtnCancel:
intent=newIntent();
intent.putExtra("fileName","");
intent.putExtra("shortFileName","");
setResult(RESULT_CANCELED,intent);
this.finish();
break;
}
}
@Override
publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,
longid){
StringentryName=(String)parent.getItemAtPosition(position);
if(entryName.endsWith("/")){
setCurrentPath(currentPath+entryName);
}else{
selectedFilePath=currentPath+entryName;
selectedFileName=entryName;
this.setTitle(this.getResources().getString(R.string.title_activity_open_file)
+"<span>[</span>"+entryName+"]");
}
}
}
activity_save_file.xml
<LinearLayoutxmlns:android="<ahref="http://schemas.android.com/apk/res/android""rel="nofollow"target="_blank">http://schemas.android.com/apk/res/android"</a> xmlns:tools="<ahref="http://schemas.android.com/tools""rel="nofollow"target="_blank">http://schemas.android.com/tools"</a> android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/SFA_LvList" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> </ListView> <EditText android:id="@+id/SFA_TxtFileName" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:text="file.txt"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/SFA_BtnOK" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="OK"/> <Button android:id="@+id/SFA_BtnCancel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Cancel"/> </LinearLayout> </LinearLayout> </LinearLayout>
SaveFileActivity.java
packagecom.example.androidfiledialogs;
importjava.io.File;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.Comparator;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.view.Menu;
importandroid.view.MenuItem;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.AdapterView;
importandroid.widget.ArrayAdapter;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.ListView;
importandroid.widget.Toast;
importandroid.widget.AdapterView.OnItemClickListener;
publicclassSaveFileActivityextendsActivity
implementsOnClickListener,OnItemClickListener{
ListViewLvList;
ArrayList<String>listItems=newArrayList<String>();
ArrayAdapter<String>adapter;
EditTextTxtFileName;
ButtonBtnOK;
ButtonBtnCancel;
StringcurrentPath=null;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_save_file);
try{
/*InitializingWidgets*/
LvList=(ListView)findViewById(R.id.SFA_LvList);
TxtFileName=(EditText)findViewById(R.id.SFA_TxtFileName);
BtnOK=(Button)findViewById(R.id.SFA_BtnOK);
BtnCancel=(Button)findViewById(R.id.SFA_BtnCancel);
/*InitializingEventHandlers*/
LvList.setOnItemClickListener(this);
BtnOK.setOnClickListener(this);
BtnCancel.setOnClickListener(this);
//
setCurrentPath(Environment.getExternalStorageDirectory().getAbsolutePath()+"/");
}catch(Exceptionex){
Toast.makeText(this,
"ErrorinSaveFileActivity.onCreate:"+ex.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
voidsetCurrentPath(Stringpath){
ArrayList<String>folders=newArrayList<String>();
ArrayList<String>files=newArrayList<String>();
currentPath=path;
FileallEntries=newFile(path).listFiles();
for(inti=0;i<allEntries.length;i++){
if(allEntries.isDirectory()){
folders.add(allEntries.getName());
}elseif(allEntries.isFile()){
files.add(allEntries.getName());
}
}
Collections.sort(folders,newComparator<String>(){
@Override
publicintcompare(Strings1,Strings2){
returns1.compareToIgnoreCase(s2);
}
});
Collections.sort(files,newComparator<String>(){
@Override
publicintcompare(Strings1,Strings2){
returns1.compareToIgnoreCase(s2);
}
});
listItems.clear();
for(inti=0;i<folders.size();i++){
listItems.add(folders.get(i)+"/");
}
for(inti=0;i<files.size();i++){
listItems.add(files.get(i));
}
adapter=newArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
listItems);
adapter.notifyDataSetChanged();
LvList.setAdapter(adapter);
}
@Override
publicvoidonBackPressed()
{
if(!currentPath.equals(Environment.getExternalStorageDirectory().getAbsolutePath()+"/")){
setCurrentPath(newFile(currentPath).getParent()+"/");
}else{
super.onBackPressed();
}
}
@Override
publicvoidonClick(Viewv){
Intentintent;
switch(v.getId()){
caseR.id.SFA_BtnOK:
intent=newIntent();
intent.putExtra("fileName",currentPath+TxtFileName.getText().toString());
intent.putExtra("shortFileName",TxtFileName.getText().toString());
setResult(RESULT_OK,intent);
this.finish();
break;
caseR.id.SFA_BtnCancel:
intent=newIntent();
intent.putExtra("fileName","");
intent.putExtra("shortFileName","");
setResult(RESULT_CANCELED,intent);
this.finish();
break;
}
}
@Override
publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,
longid){
StringentryName=(String)parent.getItemAtPosition(position);
if(entryName.endsWith("/")){
setCurrentPath(currentPath+entryName);
}else{
this.setTitle(this.getResources().getString(R.string.title_activity_open_file)
+"<span>[</span>"+entryName+"]");
TxtFileName.setText(entryName);
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。