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

ListView,Button Link aus XML File

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Makes, 26.04.2012.

  1. Makes, 26.04.2012 #1
    Makes

    Makes Threadstarter Junior Mitglied

    Beiträge:
    26
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2012
    Hallo :D,


    ich bastel an einer App die von der Struktur so aussieht:

    ----------------------
    x Name - Spiel
    x Wann
    x Link (Button)
    x Name2 - Spiel2
    x Wann2
    x Link2 (Button)
    usw
    ----------------------

    das Ganze in einem ListView.
    Also ein ListView Element besteht aus: Name, Spiel, Wann (TextView) und Link(Button)
    Alle Daten für Name,Datum, Wann und Link kommen aus einem XML File.

    Nun meine Frage:
    Wie bekomme ich den Link in den Button?

    Habe schon einige Tutorials dazu gelesen doch bisher ohne Erfolg :blushing:
    Wäre super wenn mir Jemand weiterhelfen könnte:
    Code:
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.listplaceholder);
            
            
            
            
            ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
          
           
            String xml = XMLfunctions.getXML();
            Document doc = XMLfunctions.XMLfromString(xml);
                    
            int numResults = XMLfunctions.numResults(doc);
            
            if((numResults <= 0)){
                Toast.makeText(Main.this, "Wo steht das", Toast.LENGTH_LONG).show();  
                finish();
            }
                    
            NodeList nodes = doc.getElementsByTagName("result");
                        
            for (int i = 0; i < nodes.getLength(); i++) {                            
                HashMap<String, String> map = new HashMap<String, String>();    
                
                Element e = (Element)nodes.item(i);
                if(i==0){
                    TextView update= (TextView) findViewById(R.id.textView6);
                    update.setText("letztes Update: "+XMLfunctions.getValue(e, "update"));
                } else {
    
                map.put("name", XMLfunctions.getValue(e, "name")+": " + XMLfunctions.getValue(e, "spiel") );
                map.put("date", XMLfunctions.getValue(e, "datum"));
                 mylist.add(map);    
                }    
            }        
            ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, 
                            new String[] { "name", "date" }, 
                            new int[] { R.id.item_title, R.id.item_date });
            
            setListAdapter(adapter);
            
            final ListView lv = getListView();        
            lv.setTextFilterEnabled(true);    
    
    //...
    
    }
    
     
    Zuletzt bearbeitet: 26.04.2012
  2. AquaBall, 26.04.2012 #2
    AquaBall

    AquaBall Android-Hilfe.de Mitglied

    Beiträge:
    121
    Erhaltene Danke:
    2
    Registriert seit:
    29.02.2012
    Meinst du OnClickListener()?
     
  3. Makes, 26.04.2012 #3
    Makes

    Makes Threadstarter Junior Mitglied

    Beiträge:
    26
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2012
    klar wenn das geht :)

    edit:

    also es ist mir eigentlich klar das ich durch den OnClickListener() auf den Button auf die URL komme :)
    Nur steht die URL ja nicht vorher fest sondern kommt mit dem XML file
     
    Zuletzt bearbeitet: 26.04.2012
  4. Tom299, 27.04.2012 #4
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Du könntest z.B. einen Listener für alle Buttons setzen, speicherst deine URLs in einer ArrayList und den Buttons gibst du beim Erzeugen die Position der Liste mit, wo die URL drin steht.

    Code:
    button.setTag(position);
    
    Bei einem Klick auf einen Button fragst du dann im Listener den Tag ab und damit holst du dann die URL aus der ArrayListe.

    Wobei, du könntest die URL auch gleich in den Tag schreiben ;-)
     
  5. Makes, 27.04.2012 #5
    Makes

    Makes Threadstarter Junior Mitglied

    Beiträge:
    26
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2012
    ok das hört sich gut an aber ich verstehe nicht wie ich das ganze implementieren soll :confused:

    hab jetzt ein Array das jedes Element speichert mit
    id,namen... und link

    zusätzlich wird im adapter die id gespeichert.
    wie komm ich jetzt an den link für die id in dem Button :confused2:
     
  6. Tom299, 27.04.2012 #6
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    ähm ich bin davon ausgegangen daß du das XML-File einliest, da steht doch die URL drin?
     
  7. Makes, 27.04.2012 #7
    Makes

    Makes Threadstarter Junior Mitglied

    Beiträge:
    26
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2012
    Code:
    for (int i = 0; i < nodes.getLength(); i++) {                            
                HashMap<String, String> map = new HashMap<String, String>();    
                
                
                Element e = (Element)nodes.item(i);
                if(i==0){
                    TextView update= (TextView) findViewById(R.id.textView6);
                    update.setText("letztes Update: "+XMLfunctions.getValue(e, "update"));
                } else {
                    
                    
                map.put("name", XMLfunctions.getValue(e, "name")+": " + XMLfunctions.getValue(e, "spiel") );
                map.put("date", XMLfunctions.getValue(e, "tag")+"."+XMLfunctions.getValue(e, "monat")+" - "+XMLfunctions.getValue(e, "stunde")+":"+XMLfunctions.getValue(e, "minute"));
                map.put("id", XMLfunctions.getValue(e, "id"));
                 mylist.add(map);    
                
                 
                //Eintragen in daten
                  
                d.add(new Daten(XMLfunctions.getValue(e, "name"),
                                 XMLfunctions.getValue(e, "spiel"),  
                                 XMLfunctions.getValue(e, "link"),
                                 XMLfunctions.getValue(e, "stunde"),
                                 XMLfunctions.getValue(e, "minute"),
                                 XMLfunctions.getValue(e, "tag"),
                                 XMLfunctions.getValue(e, "monat"),
                                 XMLfunctions.getValue(e, "jahr")));

    und dann noch der listAdapter

    Code:
    ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.list_element, 
                            new String[] { "name", "date", "id" }, 
                            new int[] { R.id.item_title, R.id.item_date , id, });
    ich verstehe jetzt nicht wie ich die URLs auf die verschiedene Buttons bekomme
     
  8. Tom299, 27.04.2012 #8
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    OK ich dachte, daß du deine GUI dynamisch aufbaust, also mit jedem Schleifendurchlauf ein new Button oder so.

    Wenn du nen ListView verwendest würde ich einen eigenen Adapter erstellen, dort kannst du deinen Buttons die URLs zuweisen.

    Also ne eigene Klasse erstellen (z.B. Spiel) mit den Attributen die du brauchst (Name, Spiel, Stunde, Minute, ... Link) und diese Klasse bekommt dein Adapter.

    Im Adapter kannst du dann bequem auf alle Felder zugreifen und deinen GUI-Elementen zuordnen. Dann brauchste auch keine 2 Listen oder so, nur eine ArrayList<Spiel>()
     
  9. Makes, 27.04.2012 #9
    Makes

    Makes Threadstarter Junior Mitglied

    Beiträge:
    26
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2012
    also ich habe ja bereits die Klasse Daten wo dann alles gespeichert wird.

    Aber dort einen eigenen Adapter ?

    durch HashMap(siehe Post #7) werden die Inhalte geladen für den Adapter der mit einem ListView die Elemente dynamisch aufbaut.
     
  10. Tom299, 27.04.2012 #10
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
  11. Makes, 27.04.2012 #11
    Makes

    Makes Threadstarter Junior Mitglied

    Beiträge:
    26
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2012
    ja das funktioniert ja bereits ;)
    auch onClick auf das Item im ListView hab ich erfolgreich getestet aber ich will eben ein Click auf einen Button und nicht ein Click auf das Item :(
     
  12. Tom299, 27.04.2012 #12
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    ach das problem ist, daß der button in der listview liegt und beim klick wird immer das listitem geklickt und nicht der button?

    dann gib mal im xml für den button noch folgendes an:
    Code:
    android:focusable="false"
    android:focusableInTouchMode="false"
    
     
  13. Makes, 27.04.2012 #13
    Makes

    Makes Threadstarter Junior Mitglied

    Beiträge:
    26
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2012
    neee das Problem ist das ich nicht weiß wie ich den Link auf den Button im ListView bekomme
     
  14. Tom299, 27.04.2012 #14
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    sorry, aber dann weiß ich nicht mehr, was du wirklich willst ... mit nem eigenen CustomAdapter kann man alles belegen wie man will, aber das hatte ich bereits geschrieben ... und im CustomAdapter legt man auch den OnClickListener für den Button fest, vielleicht meinst du ja das noch ;-)
     
  15. Makes, 27.04.2012 #15
    Makes

    Makes Threadstarter Junior Mitglied

    Beiträge:
    26
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2012
    ja das klingt schonmal nicht schlecht doch wie baue ich diesen CustomAdapter jetzt ein und wo wird das OnClickListener gesetzt ?
     
  16. Tom299, 27.04.2012 #16
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    du erstellst deine ArrayList und deinen Adapter ganz normal:
    Code:
    listOrder = new ArrayList<Order>();		
    orderAdapter = new OrderOrdersArrayAdapter(this, R.layout.order, listOrder);
    
    und dann an deine ListView hängen:
    Code:
    listViewOrder.setAdapter(orderAdapter);
    
    und den OnClick-Listener mußt du im Adapter implementieren, da wo du getView() überschreibst. Im Beispiel, das ich dir gelinkt habe, sieht man das. Da wo die TextViews behandelt werden kommt auch dein Button dann rein und dann der Listener.
     
    Makes bedankt sich.
  17. Makes, 27.04.2012 #17
    Makes

    Makes Threadstarter Junior Mitglied

    Beiträge:
    26
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2012
    aber ich habt doch schon einen Adapter, kann ich dann einfach einen 2 an die ListView hängen ?
     
  18. Tom299, 27.04.2012 #18
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Nein, den Simple Adapter wirfst du raus und ersetzt ihn durch deinen eigenen Adapter
     
  19. Makes, 27.04.2012 #19
    Makes

    Makes Threadstarter Junior Mitglied

    Beiträge:
    26
    Erhaltene Danke:
    0
    Registriert seit:
    26.04.2012
    oje dann muss ich ja alles umbauen was bisher ganz gut funktioniert hat:crying:

    ich probiere es heute im Laufe des Tages mal
     
  20. swordi, 27.04.2012 #20
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    probieren geht über studieren :D

    er heißt ja schon simple Adapter - ist nur für simple anwendungsfälle geeignet.
     

Diese Seite empfehlen