2017-01-21 5 views
0

Ich habe eine erweiterbare Listenansicht, und für jedes Kind, das ich brauche 4 „Extras“ haben oder Strings oder was auch immer es nennt: - childtitle - Beschreibung - link1 - link2hashmap innerhalb einer hashmap?

von einem Tutorial gefolgt, es war kein Problem, die Listenansicht, die verschiedenen Eltern und das Kind mit nur 1 String zu erstellen. Ich habe versucht, eine hashmap innerhalb einer hashmap zu erstellen, aber es hat nicht ganz funktioniert. Was ist eine bessere Lösung?

public void filldata(){ 

    ArrayList productinfo = new ArrayList<>(); 
    categories = new HashMap<>(); 
    topics = new HashMap<>(); 


    categories.add("FITNESS"); //This would be the parent title 
    categories.add("MONEY"); 

    List<String> Fitness=new ArrayList<>(); 
    List<String> Money=new ArrayList<>(); 


    Fitness.add("Product1"); // this would be child1 
    List<String> Product1=new ArrayList<>(); 
    Product1.add("desc1"); //this would be the description of child 1 
    Product1.add("link1.1");//this would be the link1 of child 1 
    Product1.add("link1.2");//this would be the link2 of child 1 


    Fitness.add("Product2"); //child2 
    Fitness.add("Product3"); //child3 

    Money.add("Product1"); //child 1 
    Money.add("Product2"); // " 2 
    Money.add("Product3"); // " 3 

    topics.put(categories.put(productinfo.get(0),Fitness)); //doesn't seem to work like this 
    categories.put(productinfo.get(1),Money); 

} 
+0

Sie erhalten eher Hilfe, wenn Sie den tatsächlichen Text der Fehlermeldung in Ihre Fragen einfügen, anstatt nur Dinge wie "scheint nicht so zu funktionieren." –

Antwort

2

Erstellen Sie einfach eine Klasse, um alle diese Informationen zu halten.

public class Child { 

String title; 
String description; 
String link1; 
String link2; 

} 

Jetzt haben Sie eine Klasse, die Sie so viele Instanzen dieser Klasse so viele Kinder erstellen, können Sie in der Listenansicht haben, und fügen Sie sie alle in eine Arraylist und übergeben, die zu Ihrem ListAdapter. Zum Beispiel kann

Child firstChild = new Child(); 
firstChild.title = "First Child"; 
firstChild.description = "Description 1"; 
firstChild.link1 = "link1"; 
firstChild.link2 = "link2"; 

List<Child> childList = new ArrayList<>(); 
childList.add(firstChild); 

Sie fügen so viele Child Objekte, die Sie zu dieser Liste wollen und dann diese Liste Ihre ListAdapter passieren.

+0

danke! fast hat es richtig gemacht, nur das Extrahieren der Werte im Adapter funktioniert nicht. Ich habe in der 'public View getChildView' Methode 'Child childList = (Kind) getChild (groupPosition, childPosition);' und versuche es mit 'childList.title' zu ​​erreichen, aber es sagt mir layout.Child kann nicht in java.lang umgewandelt werden .String –

+0

Ich folge nicht wirklich, was Sie dort zu tun versuchen. Überprüfen Sie diese Antwort jedoch für die Adapterseite des Codes [Benutzerdefinierter Adapter für die Listenansicht] (http://stackoverflow.com/a/8166802/3857465). –

1

hashmap innerhalb einer hashmap?

Ja.

A HashMap Mitarbeiter Schlüssel mit Werte. Ein Schlüssel kann jeder unveränderlicheObject sein, der die Methoden o.equals(Object otherObject) und o.hashCode() korrekt implementiert, und ein Wert kann überhaupt Object sein.

A HashMap ist nicht in der Regel unveränderlich, so dass Sie wahrscheinlich nicht wollen, HashMap Objekte als Schlüssel verwenden, aber Sie absolut HashMap Objekte als Werte verwenden können.

topics.put (Kategorien.put (...)); // scheint nicht

Sie nicht gesagt haben zu arbeiten warum, die nicht funktioniert, aber ich vermute, dass Sie es nicht kompilieren können. Der Grund ist, dass Sie versuchen, topics.put(...) mit nur einem Argument aufzurufen --- der von categories.put(...) zurückgegebene Wert. Aber die HashMap put(...) Methode erfordert zwei Argumente: Ein Schlüssel und ein Wert.