1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Verschachtelte for Schleife für FileExplorer

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von ZegativeNero, 02.03.2012.

  1. ZegativeNero, 02.03.2012 #1
    ZegativeNero

    ZegativeNero Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    02.03.2012
    Hallo Leute,

    ich hänge gerade an folgendem Problem:

    und zwar möchte ich für mein App einen eigenen kleinen Browser erstellen welcher von der Ansicht ähnlich wie der ES-FileExplorer aufgebaut ist,
    d.h. eine Tabelle mit n-Zeilen und 3 Spalten.

    In etwa so:

    File1 File2 File3
    File4 File5 File6
    File7

    Um diese Tabelle dynamisch zu erzeugen benötige ich meines Wissens nach
    "ineinander verschachtelte" For-Schleifen.
    Diese habe ich bisher wie im unten angezeigten Codeauszug umgesetzt.

    Das Problem, welches jetzt noch besteht und wo ich nicht mehr weiter weiß:

    Wenn nur eine Datei oder ein Ordner sich im Ordner befinden, wird dieser nicht angezeigt ?!?
    Sind es mehr als eine Datei / ein Ordner funktioniert es.

    Weiß jemand Rat?

    Code:
    
    TableLayout table = (TableLayout)findViewById(R.id.filestable);
                
    table.removeAllViews();
    
    TableRow Trow = null;
                
    TextView textView;
    
    int cells=files_array.size(); //Bestimmt die Anzahl der insgesammt benötigten Zellen
    
    int k = (cells/3); //Anzahl der benötigten Zeilen (bei 3 Spalten)
                
    if(cells%3 >0){ k = k+1; } //Addiert eine zusätzliche Zeile, falls bei der vorangegangenen Teilung ein Rest besteht
                
    int o = 0; //Variable um später den Index festzulegen           
    
    for (int i = 0; i < k; i++) //Schleife um die Zeilen zu erzeugen
                
    {
                    
    Trow = new TableRow(getApplicationContext());
                    
    for (int j = 0; j < 3; j++) //Füllt jede Zeile mit max 3 Werten
                    
    {
    
    o++; //Indexvariable wird aufaddiert
    
    if (o<=cells){ //Prüfung ob Index kleiner als die benötigten Zellen ist
                                
    Boolean t = checkfiles_array.get(o-1); //Variable welche übermittelt ob es sich um eine Datei oder einen Ordner handelt                                              
    if ( t == true){
    
    LinearLayout cell = new LinearLayout(this);
    cell.setOrientation(LinearLayout.VERTICAL);
    cell.setId(o-1);                                //hier bekomme ich leichte Bauchschmerzen aber naja... bisher geht es nicht anders
    cell.setClickable(true);
    cell.setOnClickListener(this);
    cell.setOnLongClickListener(this);
    
    if(filename_array.get(o-1).endsWith(".txt")){
    
    ImageView pImg1 = new ImageView(Filebrowser.this);
    pImg1.setImageResource(R.drawable.txt_file_icon);
    cell.addView(pImg1);
    
    }
    
    undsoweiterundsofort
    
     
  2. swordi, 03.03.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    Ist o++ nicht zu früh?

    Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
     
  3. JanF, 03.03.2012 #3
    JanF

    JanF Android-Experte

    Beiträge:
    594
    Erhaltene Danke:
    79
    Registriert seit:
    31.03.2011
    Sieht für mich nicht so aus, weil danach mit o-1 gearbeitet wird (was nicht zur Übersichtlichkeit beiträgt). Beim drüber sehen habe ich in dem Codeausschnitt nichts gesehen.

    Ich empfehle als Arbeitstechnik im Debuggingmodus einfach mal Zeile für zu prüfen was passiert. So kannst Du den Fehler wahrscheinlich selbst finden.
     
  4. ZegativeNero, 03.03.2012 #4
    ZegativeNero

    ZegativeNero Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    02.03.2012
    Irre...

    Lösung gefunden:
    Und zwar lag es nicht an dem oben beschriebenen Code, sondern, und jetzt kommts, daran, dass ich im Layout folgendes drinstehen hatte:

    Code:
    android:stretchColumns="0,1,2"
    
    D.h. er hatte mir den Eintrag aus der Tabelle rausgestretcht...

    Zwar sieht es gerade nicht schön aus, aber es funktioniert erstmal.

    Und wenigstens weiß ich jetzt wie man dieses Log.v/d/irgendwas einsetzt :w00t00:

    Die o-1 Lösung ist wirklich nicht sonderlich schön, ne alternative habe ich aber auch noch nicht rausgefunden
    (Das sieht ein User ja zum Glück nicht...)

    Mal wieder: Danke für die Hilfe!
     
  5. strider, 04.03.2012 #5
    strider

    strider Erfahrener Benutzer

    Beiträge:
    208
    Erhaltene Danke:
    45
    Registriert seit:
    30.09.2011
    Phone:
    Nexus S
    Du machst dir das Leben unnötig schwer.
    Anscheinend versuchst Du mit einem Tablelayout und verschachtelten For Schleifen genau das zu erreichen wozu ein GridView + Adapter die perfekte Lösung ist. Damit hast du auch den Vorteil ohne Aufwand die Ansicht von GridView auf ListView zu ändern ganz nach belieben des Anwenders.
     
  6. ZegativeNero, 04.03.2012 #6
    ZegativeNero

    ZegativeNero Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    02.03.2012
    Danke für den Tip!! Werde ich heute abend gleich mal ausprobieren ...
     

Diese Seite empfehlen