2016-09-19 2 views
1

Ich habe den folgenden Code ausprobiert.Ordner nicht in der Datei gefunden Browing

public class MainActivity extends GlobalActivity implements CompetitionListAdapter.OnOperationSelectedListener { 

    private String path = ""; 
    private RecyclerView recyclerView; 
    private boolean isOnBackPressed = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     initLogger("MainActivity"); 
     recyclerView = (RecyclerView) findViewById(R.id.listRecyclerView); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     recyclerView.setHasFixedSize(true);   
     String path = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     //path = "/storage/emulated/0/Download/pictures"; //When I pass this, then I can get the list of files in this folder. 
     loadFolders(path); 
    } 

    private void loadFolders(String path) { 
     if (this.path.isEmpty()) { 
      this.path = path; 
     } else if (!isOnBackPressed) { 
      this.path += "/" + path; //But when I make same the path dynamically from here file2 is always null. 
     } 
     writeLog(this.path); 
     File f = new File(path); 
     File file2[] = f.listFiles(); 
     ArrayList<String> folders = new ArrayList<>(); 
     if (file2 != null) { 
      for (File file1 : file2) { 
       folders.add(file1.getName()); 
      } 
     } else { 
      writeLog("fList is empty"); 
     } 
     recyclerView.setAdapter(new CompetitionListAdapter(folders, this)); 
    } 

    @Override 
    public void onOperationSelected(CompetitionListAdapter.Operation operation, String name) { 
     isOnBackPressed = false; 
     loadFolders(name); 
    } 

    @Override 
    public void onBackPressed() { 
     String paths[] = this.path.split("/"); 
     if (path.length() > 1) { 
      path = ""; 
      for (int i = 1; i < paths.length - 1; i++) { 
       path += "/" + paths[i]; 
      } 
      isOnBackPressed = true; 
      loadFolders(path); 
      return; 
     } 
     super.onBackPressed(); 
    } 
} 

So ist der obige Code funktioniert bei der App starten ... Wenn ich einen Ordner aus der Liste wählen, dann mache ich den Weg in loadFolders dynamisch, aber dieses null immer zurückgibt.

Jede Hilfe wird sehr geschätzt.

+0

wo bist du rufe 'CompetitionListAdapter.OnOperationSelectedListener' in deinem Ada auf Pter? –

Antwort

1

Sie sind Passordnerliste in Ihrem Adapter, der ist, warum Sie Ordnernamen Instanz folder_path in

@Override 
    public void onOperationSelected(CompetitionListAdapter.Operation operation, String name) { 
     isOnBackPressed = false; 
     loadFolders(name); 
    } 

ersetzen bekam

folders.add(file1.getName()); 

mit folders.add(file1.getAbsolutePath());

0

Erstellen Sie keinen neuen CompetitionListAdapter jedes Mal, wenn Sie die Daten darin aktualisieren müssen. Ich weiß nicht, wie Ihr Adapter funktioniert, aber Sie sollten eine Methode zum Aktualisieren der Liste innerhalb/Elemente hinzufügen und dann rufen Sie notifyDataSetChanged, um die Ansicht zu aktualisieren.

+0

Nein, das ist nicht das Problem ... Ich bekomme 'fList ist leer' als Logcat-Ausgabe. – Gunaseelan

0

Vergewissern Sie sich unter die Berechtigung zur Verwendung haben:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Wenn Sie bereits verwendet wird, stellen Sie sicher, ob der Pfad korrekt ist oder nicht.