2016-07-04 10 views
0

In einem Android-Datei-Manager kann ich so viele verschachtelte Ordner machen, wie ich möchte, jeder in einem anderen. Punkt ist, dass, wenn ich jeden Ordner schließe, die vorherige Ansicht korrekt fortgesetzt wird.Android, erreichen Sie ein verschachteltes View-System wie ein Dateimanager?

Angenommen, dass jeder Ordner eine Aktivität ist, wie kann ich unendlich verschachtelte Aktivitäten auf Benutzerbefehl haben (wie einen neuen Ordner erstellen), die korrekt fortgesetzt werden, wenn der Benutzer die Taste drückt?

Ich weiß, dass ich unendliche Aktivitäten mit einem einzigen Layout machen kann, aber sie werden nicht richtig zurück Knopfdruck drücken. Wie wenn ich für jede Ansicht einen Adapter verwende, der Kindansichten (Ordner) in der Ansicht aufbläht. In diesem Fall nimmt Android die zuletzt aufgeblähte Ansicht für alle Zurück-Tastendrücke wieder auf.

Antwort

1

Verwenden Sie mehrere Activities, um diesen Anwendungsfall zu implementieren, ist keine optimale Lösung, da Sie schnell über genügend Arbeitsspeicher verfügen, wenn Sie eine tief verschachtelte Dateistruktur haben. Wenn der Benutzer stattdessen in ein Verzeichnis navigiert - laden Sie einfach den Inhalt dieses Verzeichnisses und füllen Sie die Benutzeroberfläche, das gleiche gilt für die Rückwärtsnavigation. Wenn Sie ListView (oder RecyclerView) verwenden, um die Dateien in einem Verzeichnis aufzulisten, müssen Sie die Dateien des neu ausgewählten Verzeichnisses jedes Mal an die Datei Adapter übergeben, wenn ein Benutzer vor- oder zurück navigiert.

Einige Pseudo-Code, die Idee zu veranschaulichen:

void onListItemClick() { 
    File selectedDir = adapter.getSelectedDir(); 
    File[] selectedDirContents = selectedDir.list(); 
    adapter.setFiles(selectedDirContents); 
} 
+0

So praktisch meinen Sie der beste Weg ist, um die Aktivität onResume() und bevölkern die Ansicht wieder auch bei Rückwärtsnavigation außer Kraft zu setzen? – sinfa

+0

Oder vielleicht onKeyDown() muss überschrieben werden? – sinfa

+0

Sie verwenden dieselbe Aktivität für den gesamten Navigationsprozess erneut, daher wird onResume() nicht angezeigt. – Egor

Verwandte Themen