1. ZegativeNero, 02.03.2012 #1
    ZegativeNero

    ZegativeNero Threadstarter Neuer Benutzer

    Hallo Forum!

    Ich verzweifle hier gerade seit Stunden an folgendem Problem:

    Ich habe eine Haupt-Activity (Texteditor) und eine Neben-Activity (Filebrowser über TableLayout) welche über das Intent-Verfahren "lustig" miteinander komunizieren. D.h.:

    1. Die Haup-Activity ruft die Neben-Activity auf und übergibt Ihr den zu öffnenden Pfad.

    2. Die Neben-Activity übergibt beim Klick auf eine Datei, den Absoluten Pfad zurück an die Haupt-Activity, welche die Datei einliest und in einem EditText darstellt.

    Soweit funktioniert das auch erstmal.

    Nun ist es aber so, dass die Neben-Activity durch sich selbst neugestartet (ebenfalls durchs "intent-Verfahren") werden muss um, falls ein Ordner angewählt wird, das TabellenLayout neu zu erstellen und zu füllen. Und genau ab diesem Punkt werden an die Hauptactivity keine Werte mehr übergeben...

    Kann mir jemand sagen warum das so ist ?

    Haupt-Activity:
    Code:
    //...
    //Aufruf des Filebrowsers:
    
                     String currentdir = basedir.toString();                
                     Intent i = new Intent(TextEditorActivity.this, Advanced_Filebrowser.class);
                     i.putExtra("currentdir", currentdir);
                     startActivityForResult(i, 0);
    
    //...
    
    //Rückgabewert abfragen:
    
                public void onActivityResult(int requestCode,int resultCode,Intent data) {
                    
                    super.onActivityResult(requestCode, resultCode, data);
                
                if (resultCode == 1) {
    
                String returnKey = data.getStringExtra("returnKey1");
    
    //...
    
    
    
    NebenActivity:
    Code:
    //...
    //Wert an Hauptactivity zurückgeben:
    
                            Intent intent = new Intent();
                            intent.putExtra("returnKey1", files_array.get(o));
                            setResult(1, intent);
                            finish();
    
    //...
    //Nebenactivity mit neuem Pfad neustarten:
    
                            String currentdir = files_array.get(o);
                            Intent intent = new Intent(this, Advanced_Filebrowser.class);
                            intent.putExtra("currentdir", currentdir);
                            startActivityForResult(intent, REQUEST_CODE);
    
                            finish();
    
    //...
    
    

    Vielen Dank für die Hilfe!!!
     
    Zuletzt bearbeitet: 02.03.2012
  2. Fonsi, 02.03.2012 #2
    Fonsi

    Fonsi Erfahrener Benutzer

    Warum startest du dafür die komplette Activity neu? Lass doch einfach das bestehende TableLayout aktualisieren :blink:
     
  3. sixi, 02.03.2012 #3
    sixi

    sixi Erfahrener Benutzer

    da hat der Fonsi recht :) Funktionieren tut es nicht, weil du ja nach deinem Code mit den Activity-Results arbeitest. Dieser gibt jeweils an die Activity die Aufgerufen hat das Ergebnis zurück, sprich wenn du eine "Kette" mit der gleichen Activity hast musst du das Ergebnis immer wieder durchreichen -> hässlich! :)
    Also... direkt die Daten in deiner Tabelle aktualisieren :)
     
  4. ZegativeNero, 02.03.2012 #4
    ZegativeNero

    ZegativeNero Threadstarter Neuer Benutzer

    Erseinmal ein großes Dankeschön für Eure Tips! Die Idee, das TabelleLayout zu aktualisieren wollte ich so auch schon umsetzen, nur leider brachte das bisher keinen Erfolg :crying:
    Das Problem hierbei ist denke ich, dass das komplette Layout im Code erzeugt wird, und ich als Java Anfänger wohl zusätzlich auch noch auf dem Schlauch stehe...

    Hier mal die Komplette Activity mit dem Versuch das Layout zu aktualisieren:
    (P.S. Bitte haut mich nicht, wenn da ein paar Irre Hacks drin sind...)

    Code:
    package de.simple.html.editor;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.Arrays;
    import android.app.Activity;
    import android.app.Dialog;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.View.OnLongClickListener;
    import android.view.ViewGroup.LayoutParams;
    import android.view.Window;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TableLayout;
    import android.widget.TableRow;
    import android.widget.TextView;
    
    public class Advanced_Filebrowser extends Activity implements OnClickListener, OnLongClickListener {
    
            public void onBackPressed() {
    
                    finish();
    
        }
    
        public File currentdir;
        public ArrayList<String> files_array = new ArrayList<String>();
        public ArrayList<String> filename_array = new ArrayList<String>();
        public ArrayList<Boolean> checkfiles_array = new ArrayList<Boolean>();
        public Boolean t;
        public int cells;
        int o = 0;
    
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
    
            requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
            setContentView(R.layout.advanced_filebrowser);
            getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitle);
    
            Bundle extras = getIntent().getExtras();
            String currentdir_bundle = extras.getString("currentdir");
            currentdir = new File (currentdir_bundle);
    
            listDir(currentdir);
    
            TextView thispath =  (TextView) findViewById(R.id.path);
            thispath.setText(currentdir.getAbsolutePath());
    
            buildTable();
    
        }
    
        public void buildTable(){
    
                TableLayout table = (TableLayout)findViewById(R.id.tagtable);
    
                TableRow Trow;
                TextView textView;
    
                cells=files_array.size();
    
                int k = (cells/3);           
    
                if(cells%3 >0){ k = k+1; }           
    
                for (Integer i = 0; i < k; i++) {
                    Trow = new TableRow(getApplicationContext());
                    
                    for (Integer j = 0; j < 3; j++) {
    
                            o++;
    
                            if (o<=cells){
    
                            t = checkfiles_array.get(o-1);   
    
    //Hier ist irgendwo auch noch ein kleiner Bug, da er nämlich, wenn nur eine Datei im Ordner vorhanden ist, diese nicht anzeigt ... Ab 2 aufwärts funktionierts....                                           
    
                            if ( t == true){
    
                                LinearLayout cell = new LinearLayout(this);
                                cell.setOrientation(LinearLayout.VERTICAL);
                                cell.setId(o-1);
                                cell.setClickable(true);
                                cell.setOnClickListener(this);
                                cell.setOnLongClickListener(this);
    
                                if(filename_array.get(o-1).endsWith(".html")){
    
                                ImageView pImg1 = new ImageView(Advanced_Filebrowser.this);
                                pImg1.setImageResource(R.drawable.html_file_icon);
                                cell.addView(pImg1);
    
                                }
    
                                else if(filename_array.get(o-1).endsWith(".htm")){
    
                                ImageView pImg1 = new ImageView(Advanced_Filebrowser.this);
                                pImg1.setImageResource(R.drawable.htm_file_icon);
                                cell.addView(pImg1);
    
                                }
    
                                else if(filename_array.get(o-1).endsWith(".xml")){
    
                                ImageView pImg1 = new ImageView(Advanced_Filebrowser.this);
                                pImg1.setImageResource(R.drawable.xml_file_icon);
                                cell.addView(pImg1);
    
                                }
    
                                else if(filename_array.get(o-1).endsWith(".txt")){
    
                                ImageView pImg1 = new ImageView(Advanced_Filebrowser.this);
                                pImg1.setImageResource(R.drawable.txt_file_icon);
                                cell.addView(pImg1);
    
                                }
    
                                else if(filename_array.get(o-1).endsWith(".css")){
    
                                ImageView pImg1 = new ImageView(Advanced_Filebrowser.this);
                                pImg1.setImageResource(R.drawable.css_file_icon);
                                cell.addView(pImg1);
    
                                }
                                
                                else if(filename_array.get(o-1).endsWith(".jpg") || filename_array.get(o-1).endsWith(".jpeg") || filename_array.get(o-1).endsWith(".png") || filename_array.get(o-1).endsWith(".bmp") || filename_array.get(o-1).endsWith(".gif")){
    
                                ImageView pImg1 = new ImageView(Advanced_Filebrowser.this);
                                pImg1.setImageResource(R.drawable.img_file_icon);
                                cell.addView(pImg1);
    
                                }
                                
                                else {
                                    
                                ImageView pImg1 = new ImageView(Advanced_Filebrowser.this);
                                pImg1.setImageResource(R.drawable.file_icon);
                                cell.addView(pImg1);    
                                    
                                }
    
                            String shortname = filename_array.get(o-1).substring(0,filename_array.get(o-1).lastIndexOf("."));
    
                            textView = new TextView(getApplicationContext());
                            textView.setText(shortname);
                            textView.setTextColor(R.color.desctextcolor);
                            textView.setTextSize(10);
                            LinearLayout.LayoutParams para=new LinearLayout.LayoutParams(
                            LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT );
                            para.setMargins(0, 0, 0, 10);
                            para.gravity = Gravity.CENTER_HORIZONTAL;
                            textView.setLayoutParams(para);
                            cell.addView(textView);
                            Trow.addView(cell);
    
                                }
    
                            else if (t == false){
    
                            LinearLayout cell = new LinearLayout(this);
                            cell.setOrientation(LinearLayout.VERTICAL);
                            cell.setId(o-1+1000000);
                            cell.setClickable(true);
                            cell.setOnClickListener(this);
                            cell.setOnLongClickListener(this);
                            ImageView pImg2 = new ImageView(Advanced_Filebrowser.this);
                            pImg2.setImageResource(R.drawable.directory_icon);
                            cell.addView(pImg2);
                            textView = new TextView(getApplicationContext());
                            textView.setText(filename_array.get(o-1));
                            textView.setTextColor(R.color.desctextcolor);
                            textView.setTextSize(10);
                            LinearLayout.LayoutParams para=new LinearLayout.LayoutParams(
                            LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT );
                            para.setMargins(0, 2, 0, 10);
                            para.gravity = Gravity.CENTER_HORIZONTAL;
                            textView.setLayoutParams(para);
                            cell.addView(textView);
                            Trow.addView(cell);
    
                                }
    
                            }
    
                    }
    
                    table.addView(Trow);
    
                }
    
        }
    
            public void listDir(File dir) {
    
            files_array = new ArrayList<String>();
            filename_array = new ArrayList<String>();
            checkfiles_array = new ArrayList<Boolean>();
    
            File[] files = dir.listFiles();
            Arrays.sort(files);
    
            if (files != null) {
                    for (int k = 0; k < files.length; k++) {
    
                            files_array.add(files[k].toString());
                            filename_array.add(files[k].getName().toString());
    
                            if (files[k].isDirectory()) {
    
                                    checkfiles_array.add(false);
    
                                    }
                            else {
                                
                                    checkfiles_array.add(true);
    
                            }
    
                    }
    
            }
    
    }
    
            public void onClick(View v) {
    
                    listDir(currentdir);
    
                    int o = v.getId();
    
                    if (o < 1000000){
    
                            Intent intent = new Intent();
                            intent.putExtra("returnKey1", files_array.get(o));
                            setResult(1, intent);
                            finish();
    
                    }
    
                    if (o >= 1000000){
    
                            o=o-1000000;
    
                            File newdir = new File(files_array.get(o));
                                                                      
                            listDir(newdir);
    
                            TextView thispath =  (TextView) findViewById(R.id.path);
                            thispath.setText(newdir.getAbsolutePath());
    
                            buildTable();
    
                    }
    
            }
    
            public boolean onLongClick(View v)
            {
                    listDir(currentdir);
    
                    final File currentdir2 = (currentdir);
    
                    final int c = v.getId();
    
                    if (c < 1000000){
    
                        final Dialog filedialog = new Dialog(this, R.style.CustomDialog);
                        filedialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                        filedialog.setContentView(R.layout.filedialog_layout);
    
                        Button delbutton = (Button)filedialog.findViewById(R.id.btndelete);
                        delbutton.setOnClickListener(new OnClickListener() {
                            public void onClick(View v) {
    
                                 File delfile = new File(currentdir, filename_array.get(c));
    
                                 delfile.delete();
    
                                 files_array.clear();
                                 filename_array.clear();
                                 checkfiles_array.clear();
    
                                 String currentdir = currentdir2.toString();
                                 Intent fbnew = new Intent(getBaseContext(), Advanced_Filebrowser.class);
                                 fbnew.putExtra("currentdir", currentdir);
                                 finish();
                                 startActivity(fbnew);                             
    
                    }});
    
                        Button backbutton = (Button)filedialog.findViewById(R.id.btnback);
                        backbutton.setOnClickListener(new OnClickListener() {
                            public void onClick(View v) {
    
                                    filedialog.cancel();
    
                    }});
    
                        filedialog.show();
    
                    }
    
                    if (c >= 1000000){
    
                    final int w = c-1000000;
    
                        final Dialog filedialog = new Dialog(this, R.style.CustomDialog);
                        filedialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                        filedialog.setContentView(R.layout.filedialog_layout);
    
                        Button delbutton = (Button)filedialog.findViewById(R.id.btndelete);
                        delbutton.setOnClickListener(new OnClickListener() {
                            public void onClick(View v) {
    
                                    File delfile = new File(currentdir, filename_array.get(w));
    
                                    delfile.delete();
    
                                    files_array.clear();
                                    filename_array.clear();
                                    checkfiles_array.clear();
    
                                 String currentdir = currentdir2.toString();
                                 Intent fbnew = new Intent(getBaseContext(), Advanced_Filebrowser.class);
                                 fbnew.putExtra("currentdir", currentdir);
                                 startActivity(fbnew);
                                 finish();
    
                    }});
    
                        Button backbutton = (Button)filedialog.findViewById(R.id.btnback);
                        backbutton.setOnClickListener(new OnClickListener() {
                            public void onClick(View v) {
    
                                    filedialog.cancel();
    
                    }});
    
                        filedialog.show();
    
                    }
    
                    return true;
    
            }
    
    }
    
     
  5. ZegativeNero, 02.03.2012 #5
    ZegativeNero

    ZegativeNero Threadstarter Neuer Benutzer

    Ha !! Soweit gelöst erstmal ... das Problem war, dass ich die Variablen zu früh deklariert hatte, so dass diese in der build Table Funktion schon mit irgendwelchem Müll belegt waren... tztztz D.h. ich habe diese einfach in die build-table verschoben und dort die Tabelle mit .removeAllViews() geleert. Das einizigste Problem was hier jetzt noch besteht, ist, dass er, wenn nur eine Datei im Ordner ist, diese nicht anzeigt... ab 1+n Dateien funktionierts ?!?

    Wenn ich das jetzt auf die Dreckige Art lösen wollen würde, würde ich ja jeweils ne versteckte Datei in den Ordner legen ... :laugh:

    Danke Euch nochmal!
     
  6. mradlmaier, 03.03.2012 #6
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Auf die dreckige Art und Weise.... es macht schon Sinn heraus zu finden wo der logische Fehler liegt, du wirst dadurch zu einem besseren Programmierer. Im übrigen mag die dreckige Art und Weise jetzt funktionieren, aber Du hast keine Garantie, dass der Hack bei einer späteren Erweiterung der App auch noch funktioniert.
    1+n riecht definitiv nach einem logischen Fehler in deiner App. Irgendwo missverstehst Du korrekt zu indizieren, oder loopen o.ä. Das lässt sich sicher mit etwas Suche beheben.
     
  7. ZegativeNero, 03.03.2012 #7
    ZegativeNero

    ZegativeNero Threadstarter Neuer Benutzer

    Hab das Problem gelöst bekommen (siehe anderer Post)... Es lag am TableLayout in der xml Datei, da hatte ich die Zellen gestretcht, und daraufhin wurde bei nur einem File im Ordner der Inhalt aus der Tabelle rausgeschoben.
    Über Intents läuft das ganze jetzt auch nicht mehr, sondern das TableLayout wird beim Ordnerwechsel einfach neu geschrieben :)
    Mit dem 1+n wollte ich nur andeuten, dass bei mehr als einer Datei alles klappte, d.h. im Code hatte ich kein 1+n stehen...
    Der File-Browser funktioniert inzwischen wie er soll und sieht fast schon wie der ES-FileBrowser aus *juhu*

    P.S. so dreckig ist der Code jetzt auch nicht mehr ;-)
     
Die Seite wird geladen...
Ähnliche Themen - Werte mit Intent Forum Datum
[ERLEDIGT] Spinner feste double Werte zuordnen Android App Entwicklung 24.04.2017
[OFFEN] Screen einer anderen App aufnehmen und auswerten Android App Entwicklung 06.04.2017
[APPINVENTOR] Wie weise ich Werte aus Slidern zu ? Android App Entwicklung 07.02.2017
[Meinung] Spezielle App für Mittelstand erstellen (lassen) Android App Entwicklung Dienstag um 17:40 Uhr
[ERLEDIGT] Problem mit Async Task und auszuführender Aufgabe Android App Entwicklung 02.05.2017
[ERLEDIGT] Probleme mit Wear Modul Android App Entwicklung 01.05.2017
[OFFEN] Probleme mit SearchView in ArrayAdapter Android App Entwicklung 28.04.2017
[ERLEDIGT] Listview mit Datenbank über Custom ArrayList verbinden Android App Entwicklung 22.04.2017
[ERLEDIGT] Drawer mit scrollbarem Listview Android App Entwicklung 27.03.2017
[ERLEDIGT] Popup mit Fragment realisieren oder besser eine andere Klasse nehmen? Android App Entwicklung 22.03.2017

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. wert zurückgeben android

    ,
  2. wert in neue activity übergebeen