When you navigate in the file tree, the current directory will be push onto the top of history stack. Once you press BACK key, the overrided onBackPressed() method check empty of the history stack; if not empty - load the last directory; if empty - pass to super.onBackPressed(), = quit.
package com.AndroidListFiles;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class AndroidListFilesActivity extends ListActivity {
private List<String> fileList = new ArrayList<String>();
Stack<File> history;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
history = new Stack<File>();
File root = new File(Environment
.getExternalStorageDirectory()
.getAbsolutePath());
ListDir(root);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
File selected = new File(fileList.get(position));
if(selected.isDirectory()){
ListDir(selected);
}else {
Uri selectedUri = Uri.fromFile(selected);
String fileExtension
= MimeTypeMap.getFileExtensionFromUrl(selectedUri.toString());
String mimeType
= MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);
Toast.makeText(AndroidListFilesActivity.this,
"FileExtension: " + fileExtension + "\n" +
"MimeType: " + mimeType,
Toast.LENGTH_LONG).show();
//Start Activity to view the selected file
Intent intent;
intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(selectedUri, mimeType);
startActivity(intent);
}
}
void ListDir(File f){
history.push(f);
File[] files = f.listFiles();
fileList.clear();
for (File file : files){
fileList.add(file.getPath());
}
ArrayAdapter<String> directoryList
= new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, fileList);
setListAdapter(directoryList);
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
history.pop(); //remove current directory
if(history.empty()){
super.onBackPressed();
}else{
File selected = history.pop(); //Get the File on Top of history
ListDir(selected);
}
}
}
next:
- Sort the file list in order, by implementing Comparator.
0 Response to "Back in history for File Explorer"
Posting Komentar