'Spinner dropdown setOnItemSelectedListener not responding
Java code, I does display correctly, but, when clicking nothing happens, I am on Android Studio API 31, SDK31. Provided the entire code below for the only activity that exists. I hope this is enough, for someone to notice.
I really don't know, why the setOnItemSelectedListener is not working properly here. And the Spinner downdown does not respond when clicking on it.
package com.eren0045.thirtythrows;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import com.eren0045.thirtythrows.classes.Die;
import com.eren0045.thirtythrows.classes.ThirtyThrowsGame;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
public class MainActivity extends AppCompatActivity {
private ImageView[] m_DieButtons;
private Button m_rollButton;
private Spinner m_scoreChoiceDropdown;
private TextView m_scoreChoiceText;
private TextView m_scoreText;
private ThirtyThrowsGame m_game = new ThirtyThrowsGame();
private Map<ImageView, Die> m_dice = new HashMap<>();
private enum STATE { GAME, NOTIFICATION, SELECTED_MODE }
private final int[] activeDiceImages = {0,
R.drawable.white, R.drawable.white1, R.drawable.white2,
R.drawable.white3, R.drawable.white4, R.drawable.white5, R.drawable.white6
};
private final int[] inactiveDiceImages = { 0,
R.drawable.grey1, R.drawable.grey2, R.drawable.grey3,
R.drawable.grey4, R.drawable.grey5, R.drawable.grey6
};
private final int[] finishedDiceImages = { 0,
R.drawable.red1, R.drawable.red2, R.drawable.red3,
R.drawable.red4, R.drawable.red5, R.drawable.red6
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Initialize();
if(savedInstanceState == null)
SetStartValues();
}
/* @Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString(STATE.NOTIFICATION.toString(), m_scoreChoiceText.getText().toString());
outState.putString(STATE.SELECTED_MODE.toString(), m_scoreChoiceDropdown.getSelectedItem().toString());
outState.putParcelable(STATE.GAME.toString(), m_game);
for(ImageView dieImage : m_dice.keySet()){
outState.putParcelable("" + dieImage.getId(), m_dice.get(dieImage));
}
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
m_game = savedInstanceState.getParcelable(STATE.GAME.toString());
ArrayList<Die> dice = m_game.getDice();
for(int i = 0; i < m_DieButtons.length; i++)
m_dice.put(m_DieButtons[i], dice.get(i));
RefreshAllDieImageViews();
InitializeDropdown();
if(!m_game.hasStarted())
SetStartValues();
else if(m_game.isRoundScored()){ }
else if(m_game.isRoundOver()){ }
else { }
ThirtyThrowsGame.ScoreChoice selectedScore = ThirtyThrowsGame.ScoreChoice.valueOf(savedInstanceState.getString(STATE.SELECTED_MODE.toString()));
int chosenScoreIndex = m_game.getAvailableScoreChoices().indexOf(selectedScore);
m_scoreChoiceDropdown.setSelection(chosenScoreIndex);
m_scoreChoiceText.setText(savedInstanceState.getString(STATE.NOTIFICATION.toString()));
RefreshRollButtonText();
}*/
private void SetStartValues()
{
m_game = new ThirtyThrowsGame();
ArrayList<Die> gameDice = m_game.getDice();
for(int i = 0; i < gameDice.size(); i++){
m_DieButtons[i].setEnabled(false);
m_dice.put(m_DieButtons[i], gameDice.get(i));
}
InitializeDropdown();
}
/**
*
*/
private void RefreshAllDieImageViews()
{
if(!m_game.hasStarted())
return;
for(ImageView view : m_dice.keySet()) {
RefreshDieImageView(view);
}
}
/**
*
* @param view
*/
private void RefreshDieImageView(ImageView view)
{
Die current = m_dice.get(view);
int ID;
int value = current.getValue();
if(m_game.isRoundOver())
{
view.setEnabled(false);
ID = finishedDiceImages[value];
}
else {
ID = current.isEnabled() ? activeDiceImages[value] : inactiveDiceImages[value];
}
view.setImageDrawable(ContextCompat.getDrawable(this, ID));
}
/**
*
*/
private void RefreshRollButtonText()
{
String rollText;
rollText = m_game.isRoundOver() ? "Roll!" : "Roll (" + m_game.geTotalRollsLeft() + ")";
m_rollButton.setText(rollText);
}
/**
*
*/
private void Initialize() {
m_DieButtons = new ImageView[] {
findViewById(R.id.die1),
findViewById(R.id.die2),
findViewById(R.id.die3),
findViewById(R.id.die4),
findViewById(R.id.die5),
findViewById(R.id.die6)
};
m_rollButton = findViewById(R.id.rollButton);
m_rollButton.setOnClickListener(view -> Play());
m_scoreChoiceDropdown = findViewById(R.id.spinnerScoreOption);
m_scoreText = findViewById(R.id.scoreLabel);
m_scoreChoiceText = findViewById(R.id.scoreChoiceInfo);
m_scoreText.setText("Score: 0");
}
/**
*
*/
private void InitializeDropdown()
{
ArrayAdapter<ThirtyThrowsGame.ScoreChoice> spinnerAdapter = new ArrayAdapter<>(this,
android.R.layout.simple_spinner_dropdown_item, m_game.getAvailableScoreChoices());
m_scoreChoiceDropdown.setAdapter(spinnerAdapter);
m_scoreChoiceDropdown.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
ThirtyThrowsGame.ScoreChoice selectedScore = ThirtyThrowsGame.ScoreChoice.valueOf("" + m_scoreChoiceDropdown.getSelectedItem());
ArrayList<ArrayList<Die>> diceCombinations = new ArrayList<>();
int scores = m_game.getScores(selectedScore, diceCombinations);
m_scoreChoiceText.setText(selectedScore + " gives you " + scores + " scores this round.");
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) { }
}
);
}
/**
*
* @param diceCombinations
*/
private void displayDiceCombinations(ArrayList<ArrayList<Die>> diceCombinations)
{
if(m_game.isRoundOver() && m_game.hasStarted() && !m_game.isRoundScored())
{
float dpScale = getResources().getDisplayMetrics().density;
int padding = (int) (2 * dpScale);
int view_size = (int) (25 * dpScale);
int lastChildIndex = 0;
for(ArrayList<Die> dice : diceCombinations){
ImageView img;
for(Die die : dice){
img = new ImageView(this);
img.setImageDrawable(ContextCompat.getDrawable(this, finishedDiceImages[die.getValue()]));
lastChildIndex++;
}
}
}
}
/**
*
*/
private void Play() {
if (m_game.isRoundOver()) {
m_game.newRound();
for (ImageView imageView : m_dice.keySet()) {
RefreshDieImageView(imageView);
imageView.setEnabled(true);
}
RefreshRollButtonText();
m_scoreChoiceText.setText(null);
} else {
m_game.rollDice();
RefreshAllDieImageViews();
if (m_game.isRoundOver()) { }
else {
RefreshRollButtonText();
}
}
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
