ListView,Button Link aus XML File

M

Makes

Neues Mitglied
0
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:
Meinst du OnClickListener()?
 
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:
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 ;-)
 
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:
 
ähm ich bin davon ausgegangen daß du das XML-File einliest, da steht doch die URL drin?
 
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
 
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>()
 
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.
 
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 :(
 
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"
 
neee das Problem ist das ich nicht weiß wie ich den Link auf den Button im ListView bekomme
 
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 ;-)
 
ja das klingt schonmal nicht schlecht doch wie baue ich diesen CustomAdapter jetzt ein und wo wird das OnClickListener gesetzt ?
 
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.
 
  • Danke
Reaktionen: Makes
aber ich habt doch schon einen Adapter, kann ich dann einfach einen 2 an die ListView hängen ?
 
Nein, den Simple Adapter wirfst du raus und ersetzt ihn durch deinen eigenen Adapter
 
oje dann muss ich ja alles umbauen was bisher ganz gut funktioniert hat:crying:

ich probiere es heute im Laufe des Tages mal
 
probieren geht über studieren :D

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

Ähnliche Themen

A
  • AnimaAngelo85
Antworten
1
Aufrufe
337
swa00
swa00
MES
Antworten
10
Aufrufe
820
MES
MES
A
Antworten
10
Aufrufe
1.021
swa00
swa00
Zurück
Oben Unten