Reputation: 33
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 & 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
Reputation: 13009
The ListView
is there, but since you let it have a fixed height of 568dp
its two rows are rendered "behind" other View
s, 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" />
Upvotes: 1