2014-05-08 11 views
5

Ich habe vor kurzem ein neues ListView-Objekt für eine Android-Anwendung erstellt, aber ich stoße auf einige Fehler. Wenn ich versuche, einen einfachen Adapter zu verwenden, um einen Artikel zu erstellen, der einen Unterpunkt in meiner Liste enthält, überlappt das neueste erstellte Artikel die anderen. Ich verwende eine Liste von Karten, um die Elemente zu erstellen.Android ListView Subitems

Wenn ich beispielsweise ein Element zu meiner Map-Liste hinzufüge, das "1" mit einem Unterpunkt anzeigt, der "A1" anzeigt, werden der Artikel und die Unterelemente angezeigt. Wenn ich jedoch ein neues Element zu meiner Map-Liste mit dem Namen "2" mit einem Unterpunkt "B2" hinzufüge, werden die "1" und "A1" durch "2" und "B2" ersetzt. Es gibt noch zwei Punkte auf der Listview sein wird, aber einer von ihnen ist leer und der andere ist „2“ und „B2“

Hier ist mein Code:

List<Map<String, String>> data = new ArrayList<Map<String, String>>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ListView lv = (ListView)findViewById(R.id.listView1); 

     Map<String, String> datum = new HashMap<String, String>(); 
     datum.put("RouterName", "Test1"); 
     datum.put("RouterIP", "SubTest1"); 
     data.add(datum); 

     Map<String, String> datum2 = new HashMap<String, String>(); 
     datum.put("RouterName", "Test2"); 
     datum.put("RouterIP", "SubTest2"); 
     data.add(datum2); 

     SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"RouterName", "RouterIP"}, new int[] {android.R.id.text1, android.R.id.text2}); 
     lv.setAdapter(adapter); 
    } 

den Listentyp ändern, wird nicht arbeiten, weil der Simple Adapter speziell eine Map List verwendet.

+0

'Datum2' wird in diesem Code nicht verwendet ... ?? – txtechhelp

+0

@txtechelp, Das war schlechtes Kopieren von meiner Seite ... Ich habe es irgendwie vermasselt, den Code von meinem Editor zu kopieren. –

+0

make benutzerdefinierte adapter von jedem Wert Objekt (VO) -Klasse, die Ihre zwei String enthält bedeutet TextView. –

Antwort

5

mehrere Listenelemente haben Hallo fand ich einige kleine Fehler während Speichern in Hashmap. In diesem HashMap-Objekt wird nicht erstellt. Die vorherige Instanz wird gelöscht.

Bitte verwenden Sie den folgenden Code. Hoffe es wird dir helfen.

ArrayList<HashMap<String, String>> data; 
    private String[] titleArray,subItemArray; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listview); 
    ListView lv = (ListView)findViewById(R.id.listview); 
    data = new ArrayList<HashMap<String, String>>(); 
    titleArray=new String[]{"Test1","Test2"}; 
    subItemArray=new String[]{"SubTest1","SubTest2"}; 
    for(int i=0;i<titleArray.length;i++){ 
     HashMap<String,String> datum = new HashMap<String, String>(); 
     datum.put("RouterName", titleArray[i]); 
     datum.put("RouterIP", subItemArray[i]); 
     data.add(datum); 
    } 
    SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"RouterName", "RouterIP"}, new int[] {android.R.id.text1, android.R.id.text2}); 
    lv.setAdapter(adapter); 
} 
+0

Danke! Es funktioniert jetzt gut! –

0

Ich fand die Lösung.

statt mit:

Map<String, String> datum = new HashMap<String, String>(); 
datum.put("RouterName", "Test1"); 
datum.put("RouterIP", "SubTest1"); 
data.add(datum); 

ich verwenden könnte:

HashMap<String,String> datum = new HashMap<String,String>(); 
temp.put("RouterName","Test1"); 
temp.put("RouterIP", "SubTest1"); 
data.add(temp); 

Durch die gezielte Verwendung von HashMap, darf ich

+1

Nichts wird passiert, indem einfach der Map-Name geändert wird. Was ist die Ursache des Problems? – Sripathi