2012-06-23 3 views
0

Я создал файловый менеджер, который я буду использовать в своей другой программе, однако у меня возникают проблемы с ним. Он отображает список файлов на моем Android-телефоне, и я могу щелкнуть по одной папке глубоко, однако переходим более чем к одной, которая перестает работать. В основном я думаю из-за «if (K.getAbsoluteFile(). IsDirectory() == true)», если я избавлюсь от этой строки, хотя она просто сработает. Похоже, мне кажется, что я могу пойти только в одну папку, может ли кто-нибудь понять, что я сделал здесь неправильно?Диспетчер файлов Android, позволяющий мне только перейти в одну папку

Также будут рассмотрены любые руководства или то, что у вас есть на эту тему, своеобразное искажение случайного кода, который я нашел.


package book.BouncySquare; 

import java.io.File; 
import java.util.ArrayList; 
import java.util.List; 
import android.app.ListActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class FileManager extends ListActivity { 
    public File clickedFile = null; 
    private List<String> directoryEntries = new ArrayList<String>(); 

    //private List<String> directoryEntries = new ArrayList<String>(); 
    private File currentDirectory = new File("/"); 

    @Override 
    public void onCreate(Bundle icicle) { 
     Log.d("startx", "start"); 
     super.onCreate(icicle); 
     browseToRoot(); 
    } 



    public void browseToRoot() { 
     Log.d("Browse", "browse"+currentDirectory.getAbsoluteFile()); 
     browseTo(new File("/")); 
    } 



    private void browseTo(File file) { 
     Log.d("mew", "too"); 
     if(file.isDirectory()){ 
      Log.d("check", "it"); 
     fill(file);  } 
    } 


    private void browse(String x) { 
     Log.d("created", "newfile"); 
     final File K=new File(x); 
     Log.d("broke", "ass"); 
     if(K.getAbsoluteFile().isDirectory()==true){ 
     Log.d("Z"+K.getAbsoluteFile(), "directory"); 
     fill(K.getAbsoluteFile());} 
     else{ 
      Log.d("X"+K.getName(), "NotADirectoryOrHidden"); 
      Log.d("A"+K.getAbsoluteFile(), "directory"); 
     } 

    } 



    private void fill(File files) { 
     File[] meow=null; 
     this.directoryEntries.clear(); 
     meow= files.listFiles(); 
     Log.d("sss", "sss"); 
     this.directoryEntries.add(getString(R.string.current_dir));// directoryentries is an arraylist that holds our Directories names 
     this.directoryEntries.add(getString(R.string.up_one_level)); 
     for (File file : meow) { 
      this.directoryEntries.add(file.getName());  //fill our string array directoryentries with each files getName, then we pass it to arrayAdapter to populate 
      } 
     ArrayAdapter<String> directoryList = new ArrayAdapter<String>(this,R.layout.file_row, this.directoryEntries); //our context,layout, and array of directories is created 
     this.setListAdapter(directoryList); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     String clickedEntry =this.directoryEntries.get((int) id); 
     Log.d("clickedID="+id, "clickedPosition="+clickedEntry);  
     browse(clickedEntry); 
    } 
} 
+0

Из любопытства вы всегда кодируете имена случайных переменных (мяу) и выписываете выходные сообщения (сломал задницу)? – Russ

+0

Также первым параметром для операторов 'Log' является тег. Обычно группировать их вместе. Обычно я создаю 'public static final String LOGTAG =" MyActivityName "' В классе и передаем это как первый параметр. Таким образом, когда у вас есть несколько файлов/действий, вы можете легко сказать, какой модуль бросил какое сообщение. Просто конвенция. – Russ

ответ

1

Попробуйте предваряя текущую директорию на то, что вы желаете, чтобы перечислить.

private void browse(String x) { 
    Log.d("created", "newfile"); 
    final File K=new File(currentDirectory, x); 
    Log.d("broke", "ass"); 
    if(K.getAbsoluteFile().isDirectory()==true){ 
    Log.d("Z"+K.getAbsoluteFile(), "directory"); 
    currentDirectory = K.getAbsoluteFile(); 
    fill(K.getAbsoluteFile());} 
    else{ 
     Log.d("X"+K.getName(), "NotADirectoryOrHidden"); 
     Log.d("A"+K.getAbsoluteFile(), "directory"); 
    } 

} 
+0

О, хватит, это исправлено! Большое спасибо человеку. Я действительно ценю это. – user1476328

Смежные вопросы