0

So I have this code for a ListView with 2 lines in Android Studio.

 ListView resultsListView = (ListView) findViewById(R.id.AboutListView);

    HashMap<String, String> nameAddresses = new HashMap<>();
    nameAddresses.put("Diana", "3214 Broadway Avenue");
    nameAddresses.put("Tyga", "343 Rack City Drive");
    nameAddresses.put("Rich Homie Quan", "111 Everything Gold Way");
    nameAddresses.put("Donna", "789 Escort St");
    nameAddresses.put("Bartholomew", "332 Dunkin St");
    nameAddresses.put("Eden", "421 Angelic Blvd");

    List<HashMap<String, String>> listItems = new ArrayList<>();
    SimpleAdapter adapter = new SimpleAdapter(this, listItems, R.layout.list_item,
            new String[]{"First Line", "Second Line"},
            new int[]{R.id.line1, R.id.line2});


    Iterator it = nameAddresses.entrySet().iterator();
    while (it.hasNext())
    {
        HashMap<String, String> resultsMap = new HashMap<>();
        Map.Entry pair = (Map.Entry)it.next();
        resultsMap.put("First Line", pair.getKey().toString());
        resultsMap.put("Second Line", pair.getValue().toString());
        listItems.add(resultsMap);
    }

    resultsListView.setAdapter(adapter);

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView android:id="@+id/line1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/colorAccent"
    android:textSize="21sp"
    android:textStyle="bold"
    />

<TextView android:id="@+id/line2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="@android:color/holo_green_dark"
android:textStyle="bold"
/>

And for some reason, the items are not showing up how I want. They're showing in random order not in the order they're formatted in the code. app preview

How can I fix this?

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
vscorpio
  • 3
  • 1
  • Do away with nameAddresses and the iterator. Build up your list items directly. – greenapps Jul 28 '18 at 13:27
  • I am very beginner in Java the code I currently have is from a tutorial. Can you replace that part for me? – vscorpio Jul 28 '18 at 13:34
  • I think is your `HashMap` cause this you can use `LinkedHashMap`. `HashMap` has no order. – Crammeur Jul 28 '18 at 13:37
  • Check at this post for what i said. https://stackoverflow.com/questions/2889777/difference-between-hashmap-linkedhashmap-and-treemap – Crammeur Jul 28 '18 at 13:45

1 Answers1

0

Iterating a HashMap is not guaranteed to access elements in the same order you added them in. If you need that property, use a LinkedHashMap or an ArrayList. The former will be easier for you to convert your existing code to, simply replace

HashMap<String, String> nameAddresses = new HashMap<>();

with

LinkedHashMap<String, String> nameAddresses = new LinkedHashMap<>();
Tyler V
  • 9,694
  • 3
  • 26
  • 52