'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