Listview zu neuer Listview Activity

  • Hey Leute!
    Bin dabei einen listview zu erstellen.
    Dabei sollte, wenn ich auf ein Item in der Listview(Studienbereiche) klicke eine neue listview angezeigt werden(Studienbereich x) und dann nochmal bei click auf ein Item eine wiederum listview(Studiengang) und daran sollte dann nochmal ein listview(das semester) stehen im letzten schritt dann eben ein webview angelegt sein.


    zB. Listview Listview Listview Listview Webview
    A1 ---> a2 ---> a3 ---> a4 --->Webview
    B1 ---> b2 ---> b3 ---> b4 --->Webview


    also ich hoffe ihr versteht was ich meine?


    hier mal mein code den ich bisher habe...


    [fieldset]import android.app.ListActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;


    public class ListViewStundenActivity extends ListActivity {


    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, STUDIENBEREICHE));


    ListView lv = getListView();
    lv.setTextFilterEnabled(true);


    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {
    // When clicked, show a toast with the TextView text
    //Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
    // Toast.LENGTH_SHORT).show();

    //public void onClick(View v) {
    Intent in = new Intent(ListViewStundenActivity.this,Architektur.class);
    startActivity(in);
    }
    });
    }
    static final String[] STUDIENBEREICHE = new String[] {
    "A","B","B2","B3"
    };

    }
    [/fieldset]



    [fieldset]public class Architektur extends ListActivity {


    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setListAdapter(new ArrayAdapter<String>(this, R.layout.architektur, STUDIENGAENGE));


    ListView lv = getListView();
    lv.setTextFilterEnabled(true);


    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {
    // When clicked, show a toast with the TextView text
    Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
    Toast.LENGTH_SHORT).show();

    /*setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
    Intent in = new Intent(ClickPerButtonActivity.this,Hoersaal.class);
    startActivity(in);*/
    }
    });
    }

    static final String[] STUDIENGAENGE = new String[] {
    "Bachelor Architektur","Bachelor Innenarchitektur","Bachelor KlimaEngineering","Master Architektur","International Master of Interior-Architectural Design",
    "Master Stadtplanung","Master Internationales Projektmanagement"
    };
    }
    [/fieldset]




    ich hoffe mir kann jemand helfen...
    weiss nicht wie ich die 2 klassen "verbinden" kann...


    Grüße
    und DANKE!!
    Sascha

  • HI TheSasch,


    um ehrlich zu sein ich versteh nicht ganz wo dein Problem ist.


    was meinst du mit :

    Zitat

    weiss nicht wie ich die 2 klassen "verbinden" kann...

    ?



    Mfg Titus


    EDIT: müsste in der Click Methode der Activity Architektur nicht statt:

    Java
    Intent in = new Intent(ClickPerButtonActivity.this,Hoersaal.class);


    das hier stehen:

    Java
    Intent in = new Intent( Architektur.this,Hoersaal.class);


    oder seh ich das Falsch?

  • Sorry wenn ich mich sehr laienhaft ausdrücke aber ich habe noch nicht so den Durchblick :D ...
    Ich meine eben weiss nicht wie ich da jetzt eine ClickActivity eingebaut bekomme mit der ich dann von listview zu listview "switchen" kann.
    also ich will es so, dass wenn man einen Studienbereich auswählt, die verschiedenen Studiengänge angezeigt werden.
    Dann wählt man einen Studiengang und wählt dann ein Semester etc pp...



    EDIT: ja da hast du recht, das habe ich nur reinkopiert um es mal "da zu haben" ist ja auch noch auskommentiert.

  • Hi TheSasch,


    mmhh ok dann versuch ich es mal.


    Vereinfachte Grundlagen:
    Wie du wahrscheinlich schon selbst raus gefunden hast, werden die einzelnen "Bildschirme" in Activities(in deinem Fall ListActivity) dargestellt. Diese Activities haben erstmal untereinander keine direkte Verbindung man bezeichnet sie auch als lose gekoppelt. Um jetzt aus einer Activity einen andere auf zu rufen benötigst du (wie du auch schon raus gefunden hast) Intents.


    So jetzt zu deinem Problem:
    Du möchtest aus der Listactivity "A1" die ListActivity "A2" aufrufen und aus dieser dann ListActivity "A3" usw.
    Denn Code den du verwendest ist eigentlich schon der richtige Weg.


    ListActivity A1


    ListActivity A2



    A3 und folgenden sehen genauso aus.


    So nachdem wir nur den Code für 2 verschiedene ListActivities erstellt haben müssen sie noch die der App bekannt gemacht werden.
    Dafür geht man ins AndroidMainfest.xml und fügt folgendes hinzu:


    Hoffe das bringt dich weiter falls nicht sag bescheid.


    Mfg Titus

  • Vielen Dank erstmal!



    ich verstehe nun nicht ganz:


    - was muss ich hinter "setListAdapter" schreiben?
    - wie kann ich nun in A1 eine ganze Liste anzeigen? wie kann ich nun in A2 eine Liste anzeigen, in A3 etc.


    bin langsam am verzweifeln ?(

  • Hi TheSasch,
    mmhh ok versuchen wir es mal anderes.
    Leg dir mal eines neues sauberes Projekt an. Keine Angst ist nur zu nur zur Übung :)
    So dann erstellst du dir eine neue Klasse A1 und trägst in ihr folgenden Code ein:


    Code Klasse A1:


    Code listitem:

    Code
    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="10dp"
        android:textSize="16sp" >
    </TextView>


    Wenn du dein Projekt jetzt ausführst müsste der ganze Spaß ungefähr so aussehen:
    [Blockierte Grafik: http://s14.directupload.net/images/120618/temp/ngsl5s4c.png]


    Ok nun erweiterst du dein Package um die Klassen A2, A3.
    Code Klasse A2:


    Code Klasse A3:


    Da beide Activities der Anwendung noch vor dem Start bekannt seihen müssen erweiterst du die AndroidManifest.xml.
    Code AndroidMainfest.xml:


    So jetzt müssen in den Klasse A1 und A2 nur noch das Klick event implementiert werden.
    Klasse A1 mit OnItemClick:


    Klasse A2 mit OnItemClick:


    So sieht dann das Ganze aus wenn du es ausführst:
    [Blockierte Grafik: http://s1.directupload.net/images/120618/temp/szafvlg9.png]


    Falls das auch nicht geht müsstest du mal ganz genau schreiben was du machst und was nicht geht.


    Mfg Titus

  • Hey hey!
    Dir nochmals vielen Dank für die Mühen!


    Wenn ich es ausführe passiert nun alles wie es sollte! Danke erstmal schon hierfür!


    Jetzt ist meine Frage:
    Hier steht ja jetzt, dass sich bei Klick von A1 die Klasse A2 öffnet.
    Das ist schon mal super!


    Jetzt geht es mir allerdings darum dass sich zB bei Klick auf A2(Bauingenieurwesen)eine Klasse B1(mit dann eben Bachelor Bauingenieurwesen,Bachelor Infrastrukturmanagement...etc pp) öffnet.
    Also im Endeffekt dass man seinen Studienbereich auswählen kann->Studiengang->entsprechendes Semester


    [fieldset]setListAdapter(new ArrayAdapter<String>(getApplicationContext(),
    R.layout.listitem, STUDIENBEREICHE));


    ListView lv = getListView();


    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {


    Intent intent = new Intent(A1.this, A2.class);
    startActivity(intent);[/fieldset]


    Ich hoffe du verstehst mein Anliegen.
    MfG
    Sascha


    edit: brauche ich dann für jeden "Studienbereich",sowie für jeden "Studiengang" und jedes "Semester" eine eigene Klasse?... das wäre nämlich meeega langwirig -.- , besonders da jedem Semester noch ein Webview folgen muss mit dem jeweiligen Stundenplan...

  • Hi Sasch,


    das wäre wirklich langwierig und unsinnig.
    Du musst dir eher überlegen, wie du diese 3 activities (und somit die 3 Listviews) für alles nutzen kannst.


    Auf gut deutsch, wie kann ich die selbe Liste für x-beliegiben Studienbereich, Studiengang, etc. nutzen.


    Fest steht, dass du alle Daten schon irgendwie speichern musst.
    Du kannst jetzt theoretisch nach dem Modell von Titus für alles ein Array erstellen, das wäre aber genau so langwierig und unsinnig (nicht falsch verstehen: Beim Beispiel von Titus war es schon sehr gut gewählt, damit du das Prinzip verstehst).
    Nun aber bräuchtest du Unmenegen an arrays: ein array Studienbereich1-Studiengang1, Studienbereich1-Studiengang2,.....Studienbereich2-Studiengang1, Studienbereich2-Studiengang2,.....usw. bis alle Studienbereiche, Studiengänge, Semester,..... etc durch wären. Also im Endeffekt fast wie bei deinem Gedanken mit den unzähligen Activities.


    Da gehen wir doch lieber einen Schritt weiter und speichern alles entweder in eine SQL-lite-Datenbank oder in eine XML-Datei. Du hast dann die Daten alle schön vorliegen, die du dann hervorholst, wie du sie brauchst, und füllst entsprechend der Auswahl dann die nächste Listview.
    z.B. füllst du die Listview der Activity1 mit allen Studienbereichen.
    - Wählt nun der User den Studienbereich SB1, so holst du alle Studiengänge für Studienbereich SB1 und packst sie in die Listview der Activity2.
    - Wählt der User hingegen in Activity1 den Studienbereich SB2, so holst du alle Studiengänge für Studienbereich SB2 und packst sie in die Listview der Activity2.
    Genauso für alle anderen Studienbereiche.
    So gehst du dann auch bei den Studiengängen - Semestern vor.
    Die Webview packst du dann auch in eine Activity, die je nach Auswahl, aus der Datenbank oder der XML-Datei den entsprechenden Inhalt bekommt, sei es ein Link oder HTML-Code, oder was auch immer.
    Das ganze bleibt in deinem Fall also bei 5 Activities, 4 mit jeweils einer Listview und 1 mit einer Webview. Alles wird je nach Auswahl und Bedarf mit den entsprechenden Daten gefüllt.


    Ich weiss nicht welche Vorkenntnisse du in den Bereichen Datenbanken und/oder XML-Dateien hast. Mach dich mal in den Bereichen schlau, wie beide aufgebaut sind, wie man Daten hineinbekommt und wie man daraus Daten ausliest und in eine Anwendung bekommt und verarbeitet. Überleg dir dann, womit du am besten klar kommst. Beide "Verfahren" haben ihre Vor- und Nachteile. Es gibt jedenfalls unzählige Tutorials und Bespiele im Netz zu beiden Bereichen. Spiel damit rum, um dich mit dem Thema vertraut zu machen, auch wenn sie im ersten Moment nicht sehr hilfreich erscheinen, oder für dein Projekt nicht geeignet. Du wirst aber sicherlich in vielen Punkten einen Aha-Effekt haben und in anderen ein großes Fragezeichen über dem Kopf. Deine Fragen werden jedenfalls so gemindert und konkretisiert.


    Mach dich außerdem noch schlau, wie du Parameter von einer Activity an eine andere übergeben kannst. Du musst ja der jeweils nächsten Activity immer mitteilen, welche Auswahl der User getroffen hat, und welcher Inhalt geladen werden sollte



    Hoffe, ich hab etwas Licht ins Dunkle bringen können, 8)
    (auch wenn ich mir vorstellen kann, dass du nun wie der Ochs vorm Berg stehst und nur Bahnhof verstehst....keine Angst, geh das einfach an und kämpf dich durch, nach dem Motto...wenn das andere verstehen und schaffen, dann ich auch ;) )


    Gruß,


    wasa

  • Vielen vielen vielen Dank Wasa!


    Habe mir auch gedacht dass das ziemlich langwierig wird...


    Am liebsten würde ich das per xml machen. dh ich speichere die "arrays" in der xml und rufe sie aus den klassen jeweils auf?
    Im prinzip könnte ich aber auch Datenbanken nutzen, mir wäre die "leichtere" Variante um einiges lieber! Was meinst du ist "leichter" zu verstehen für einen Einsteiger?


    Jetzt bräuchte ich nur noch das passende tut dazu ... nächste Woche ist nämlich Abgabe... :-/

  • Hi Sasch,


    also für deine Zwecke würde ich schon eher zur Lösung mit dem XML tendieren. Der Aufbau einer XML Datei ist schnell verständlich und das Integrieren der ganzen Sache in die Anwendung ist meiner Meinung nach auch einfacher. Datenbanken müssen extra installiert werden oder so (weiss da auch nicht so genau, muss ich zugeben).
    Ein geeignetes Tut habe ich jetzt auch nicht auf Anhieb. Bin auch auf Arbeit und hab auch nicht die Zeit zu schauen.
    Google einfach mal zuerst generell nach "Aufbau XML" und dann "Android XML Parsing" oder "Android open and read local XMl" o.ä. Wichtig bei letzterem ist, dass du nach Tuts schaust, die lokale XML Dateien öffnen und auslesen, da es auch die Möglichkeit gibt, es über Netz von nem Server zu laden. Das ist wohl bei dir nicht so ganz gegeben.
    Ich mach mich später mal schlau und schicke dir 1-2 links, wenn ich welche finde, wenn sonst niemand schneller ist.


    Gruß,


    wasa

  • Hey!
    Ich mach das jetzt über die langwierige-Methode.


    Habe 3Klassen mit den jeweiligen Listen angelegt, nicht schön aber es funktioniert. Hier übergebe ich immer die Auswahl die der Nutzer getroffen hat...


    in der letzten Klasse dann folgendes, um den WebView zu starten. Man bin ich froh dass das jetzt funktioniert :)


    [fieldset]Bundle bundle = this.getIntent().getExtras();
    final String[] SEMESTER = bundle.getStringArray("semester");


    setListAdapter(new ArrayAdapter<String>(getApplicationContext(),
    R.layout.listitem, SEMESTER));

    ListView lv = getListView();

    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {
    Intent intent = new Intent(D3.this, WebViewActivity.class);
    intent.putExtra("semester", SEMESTER[position]);
    startActivity(intent);[/fieldset]



    jetzt habe ich allerdings noch ein anliegen:
    ich möchte eine listview haben mit:
    -A
    -B
    -C
    -D


    bei click auf A soll sich ein Webview mit dem entsprechenden Link öffnen, bei click auf B der entsprechende Link für B, etc.


    Wie kann ich das am simpelsten umsetzen?


    Grüße

  • hi TheSasch,


    das einfachst wäre über ein switch/case Abfrage innerhalb der Methode "setOnItemClickListene".



    Mfg Titus

  • ok danke dir titus! allerdings blicke ich nicht ganz durch mit dem switch.
    hier mal mein bisher geschriebenes:


    [fieldset]package hft.app.sascha;


    import android.app.ListActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.webkit.WebView;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;


    public class MoreActivity extends ListActivity {


    private WebView webView;

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);



    Bundle bundle = this.getIntent().getExtras();
    final String param = bundle.getString("menuitems");

    webView = (WebView) findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setSupportZoom(true); // Zoom Control
    webView.getSettings().setBuiltInZoomControls(true); // Enable Multitouch

    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,
    menuitems));


    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {


    switch (position) {
    case 0: // starte Moodle Webview
    break;
    case 1: // starte Onlinefunktionen Webview
    break;
    case 2: // starte Webmail Webview
    break;
    }
    // "Loading"-Toast/Text nach berühren des Buttons
    Toast.makeText(getApplicationContext(), "Loading... |" + param + "|",
    Toast.LENGTH_LONG).show();

    // if (param.equals("Moodle")) {
    // webView.loadUrl("http://www.google.de/");
    // } else if (param.equals("Onlinefunktionen")) {
    // webView.loadUrl("http://www.google.de");
    // } else if (param.equals("Webmail")) {
    // webView.loadUrl("https://www.google.de");


    }}}
    );
    }}[/fieldset]

  • Hi TheSasch,


    und was ist jetzt dein Problem?
    Verstehst du die Syntax von der switch/case Abfrage nicht?


    Mfg Titus


    P.s. hat das einen Grund warum du innerhalb der ListActivity deine WebView anzeigst?

  • Hi TheSasch,
    du erstellst eine neue Activity Website und in der schreibst du dann einfach deine Webview.
    Innerhalb der setOnItemClickListener rufst du dann per intent diese Activity auf und übergibst ihr die URl die du sehen möchtest.



    Ähm dein App ist doch für ne Hochschule oder? Was studierst du denn? (falls man fragen darf)


    Mfg TItus

  • Natürlich! Studiere Informationslogistik. Was studierst du?(falls man fragen darf)
    Danke dir! Werde mir das Morgen mal reinziehen, habe jetzt gerade das "langwierige"-Teil erst fertig bekommen :)
    Gute Nacht und vielen Dank nochmal für die ganze Hilfe hier in diesem Forum!

  • so jetzt habe ich wieder etwas. und zwar sollte sich aus einer liste, je nach klick, der passende link in einem webview öffnen.


    dazu habe ich 2 klassen erstellt.
    [fieldset]package hft.app.sascha;


    import android.app.ListActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;


    public class AndroidListViewActivity extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // storing string resources into Array
    String[] more_list = getResources().getStringArray(R.array.more_list);

    // Binding Array to ListAdapter
    this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item2, R.id.label, more_list));

    ListView lv = getListView();


    // listening to single list item on click
    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {

    // selected item
    String more = ((TextView) view).getText().toString();

    // Launching new Activity on selecting single List Item
    Intent i = new Intent(getApplicationContext(), MoreWebView.class);
    // sending data to new activity
    i.putExtra("more", more);
    startActivity(i);

    }
    });
    }
    }[/fieldset]



    und
    [fieldset]package hft.app.sascha;



    import android.app.Activity;
    import android.os.Bundle;
    import android.webkit.WebView;
    import android.widget.Toast;


    public class MoreWebView extends Activity {


    private WebView webView;


    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.webview);


    Bundle bundle = this.getIntent().getExtras();
    String param = bundle.getString("more");


    webView = (WebView) findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setSupportZoom(true); // Zoom Control
    webView.getSettings().setBuiltInZoomControls(true); // Enable Multitouch
    WebView browser = (WebView) findViewById(R.id.webView);
    browser.getSettings().setLoadWithOverviewMode(true);
    browser.getSettings().setUseWideViewPort(true);


    // "Loading"-Toast/Text nach berühren des Buttons
    Toast.makeText(getApplicationContext(), "Loading... |" + param + "|",
    Toast.LENGTH_LONG).show();


    if (param.equals("Moodle")) {
    webView.loadUrl("http://moodle.hft-stuttgart.de/");
    } else if (param.equals("Onlinefunktionen")) {
    webView.loadUrl("http://www.hft-stuttgart.de/Studium/Online_Funktionen/index.html/de");
    } else if (param.equals("Webmail")) {
    webView.loadUrl("https://arctur.rz.hft-stuttgart.de/jsso/SSOLogin?appurl=https%3A%2F%2Farctur.rz.hft-stuttgart.de%2Fzimbra%2F&appid=%2Fzimbra#arctur.rz.hft-stuttgart.de#443");
    } else if (param.equals("Scolp")) {
    webView.loadUrl("http://www.scolp.de");
    }}}
    [/fieldset]



    list_data.xml


    [fieldset]<?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string-array name="more_list">
    <item>Moodle</item>
    <item>Online Funktionen</item>
    <item>Webmail</item>
    <item>Scolp</item>

    </string-array>
    </resources>
    [/fieldset]



    habe einen "Home"-Screen von diesem Screen, verbindet ein Button zu dieser Listview. Bei Klick auf den Button passiert nichts...
    Kann mir bitte jemand helfen?
    was mache ich falsch?
    Grüße

  • Hi TheSasch,


    befindet sich der "Home"-Screen vor dem Screen mit der ListView?
    Falls ja wär es nicht schlecht gewesen wenn du den Code von diesem auch gepostet hättest.
    Gibs ne Fehlermeldung?
    LogCat?


    Mfg Titus


    P.s. Was macht man den als Informationslogistiker? kann mir irgendwie gar nix darunter vorstellen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!