Aditya
Aditya

Reputation: 425

"setOnItemSelectedListener()" not called when selecting item in spinner

I'm creating an android app which is used for hotel management.

I want to show the user, the number of rooms available in the form of spinner.

I'm storing the details(roomNumber, name address etc..) in google firebase.

If the user is logging in the app for first time then all the room numbers in spinner should be visible. But if the user has already booked a room then that room number should not be visible in spinner.

Here is the java code:

documentReference.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
           @Override
           public void onSuccess(DocumentSnapshot documentSnapshot) {
               if(documentSnapshot.exists()){
                   roomNumberDocument=documentSnapshot.getString("RoomNumber");
                   if(roomNumberDocument!=null){
                       for (int i = 100; i < 111; i++) {
                           if(Integer.parseInt(roomNumberDocument)==i){
                               continue;
                           }
                           roomNumbersList.add(Integer.toString(i));
                       }
                   }else{
                       //room numbers
                       roomNumbersList.add("100");
                       roomNumbersList.add("101");
                       roomNumbersList.add("102");
                       roomNumbersList.add("103");
                       roomNumbersList.add("104");
                       roomNumbersList.add("105");
                       roomNumbersList.add("106");
                       roomNumbersList.add("107");
                       roomNumbersList.add("108");
                       roomNumbersList.add("109");
                       roomNumbersList.add("110");
                   }

               }
           }
       });

If the room is already booked then roomNumberDocument will not be null else it will be null.

If the room is already booked then I will not add it into the ArrayList roomNumbersList.

Here I'm setting up the adapter:

adapterRoomNumbers= new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, roomNumbersList);
        adapterRoomNumbers.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerRoomNumber.setAdapter(adapterRoomNumbers);

Here is the click listener for the spinner:

spinnerRoomNumber.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                strRoomNumber= adapterView.getItemAtPosition(i).toString();
                Toast.makeText(context, ""+strRoomNumber, Toast.LENGTH_LONG).show();
                Log.i(TAG, strRoomNumber);
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });

The problem is that setOnItemSelectedListener() is not called if I select any item in the spinner.

Because of that strRoomNumber is getting null. I will use strRoomNumber for storing it in the firebase database.

Here is my full code

What might be the problem?

Upvotes: 1

Views: 516

Answers (2)

i_A_mok
i_A_mok

Reputation: 2904

Try move the codes for setting up the adapter to just before documentReference.get().addOnSuccessListener ....... and inside onSuccess method, add this as the last line: adapterRoomNumbers.notifyDataSetChanged();

Explanation: Adapter is not updated correctly as calls to firebase is an async process.

Upvotes: 1

narcis dpr
narcis dpr

Reputation: 1135

your setOnItemSelectedListner must look like this:

 spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view,
                int i, long id) {
            strRoomNumber = adapterView.getItemAtPosition(i).toString;
            if (item != null) {
                Toast.makeText(MainActivity.this, item.toString(),
                        Toast.LENGTH_SHORT).show();
            }
            Toast.makeText(MainActivity.this, ""+strRoomNumber,  Toast.LENGTH_LONG).show();
            Log.i(TAG, strRoomNumber);

        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

also check this out for more info setOnItemSelectedListener of Spinner does not call

Upvotes: 0

Related Questions