Werte mit Intent aus "neu gestarteter" Activity übergeben

Z

ZegativeNero

Neues Mitglied
0
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:
ZegativeNero schrieb:
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...

Warum startest du dafür die komplette Activity neu? Lass doch einfach das bestehende TableLayout aktualisieren :blink:
 
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 :)
 
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;

        }

}
 
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!
 
ZegativeNero schrieb:
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!

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.
 
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 ;-)
 

Ähnliche Themen

5
Antworten
22
Aufrufe
1.421
590239
5
R
  • RalfKahl
Antworten
10
Aufrufe
301
RalfKahl
R
R
  • Robby1950
2
Antworten
23
Aufrufe
1.016
Robby1950
R
Zurück
Oben Unten