Tmills9208
Tmills9208

Reputation: 33

Android ListView isnt displaying items despite the ListView and SimpleAdapter having data

I am not sure why results arent appearing within my ListView. I even have debug logs telling me that both adapter and listview have a count of 2 items, but it still doesnt display anything. Here is the code

SelectPlayerActivity.java

PlayerDB db = new PlayerDB(this);
ArrayList<Player> data = db.getPlayers();
ArrayList<HashMap<String, String>> hashData = new ArrayList<HashMap<String, String>>();
for (Player player : data){
    hashData.add(Player.ConvertPlayerToHashMap(player));
}

// create the resource, from, and to variables
int resource = R.layout.playerlist_row;
String[] from = {"name"};
int[] to = {R.id.playerName};

// create and set the adapter
SimpleAdapter adapter =
        new SimpleAdapter(this, hashData, resource, from, to);
listPlayers.setAdapter(adapter);
adapter.notifyDataSetChanged();

// Both of these show the right amount of data, showing up as 2
Log.d("SelectPlayerActivity", "Adapter counted: " + adapter.getCount());
Log.d("SelectPlayerActivity", "ListView counted: " + listPlayers.getCount());

listPlayers.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        HashMap<String, String> hashPlayer = (HashMap<String, String>)listPlayers.getAdapter().getItem(position);
        if (hashPlayer.getClass() != HashMap.class) {
            Log.e("SelectPlayerActivity", "Error! hashPlayer is not a HashMap!");
        }
        else {
            selectedPlayer = Player.ConvertHashMapToPlayer(hashPlayer);
            finish();
        }
    }
});

I have also included the layout files in case its an issue with those

activity_select_player.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SelectPlayerActivity">

    <TextView
        android:id="@+id/lblName"
        android:layout_width="79dp"
        android:layout_height="43dp"
        android:layout_marginStart="12dp"
        android:layout_marginLeft="12dp"
        android:layout_marginTop="12dp"
        android:gravity="center"
        android:text="Player"
        android:textSize="18sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnApplySelection"
        android:layout_width="381dp"
        android:layout_height="103dp"
        android:text="Apply Selection &amp; Return to Menu"
        android:textSize="18sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <EditText
        android:id="@+id/txtName"
        android:layout_width="292dp"
        android:layout_height="45dp"
        android:layout_marginTop="12dp"
        android:ems="10"
        android:hint="Use the list below to select a player"
        android:inputType="text"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.333"
        app:layout_constraintStart_toEndOf="@+id/lblName"
        app:layout_constraintTop_toTopOf="parent" />

    <ListView
        android:id="@+id/listPlayers"
        android:layout_width="409dp"
        android:layout_height="568dp"
        android:layout_marginBottom="1dp"
        app:layout_constraintBottom_toTopOf="@+id/btnApplySelection"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0" />
</androidx.constraintlayout.widget.ConstraintLayout>

playerlist_row.xml

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

    <TextView
        android:id="@+id/playerName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"/>

</LinearLayout>

EDIT1 I have included data from the hashMap variable below, exactly as copied from the logs

hashData = {ArrayList@11212}  size = 2
 0 = {HashMap@11269}  size = 5
  "wins" -> "0"
  "ties" -> "0"
  "name" -> "Marky"
  "id" -> "1"
  "losses" -> "0"
 1 = {HashMap@11270}  size = 5
  "wins" -> "0"
  "ties" -> "0"
  "name" -> "asdasd"
  "id" -> "2"
  "losses" -> "0"

Upvotes: 3

Views: 193

Answers (1)

B&#246; macht Blau
B&#246; macht Blau

Reputation: 13009

The ListView is there, but since you let it have a fixed height of 568dp its two rows are rendered "behind" other Views, for example the app bar (in my sample app the second row was partially visible and the first row was covered by a TabLayout)

I changed the constraints for the ListView as follows to have it appear below the EditText

    <ListView
        android:id="@+id/listPlayers"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginBottom="1dp"
        app:layout_constraintBottom_toTopOf="@+id/btnApplySelection"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txtName"
        app:layout_constraintVertical_bias="1.0" />

enter image description here

Upvotes: 1

Related Questions