Android Spinner on Item Selected Is Not Working?

160 views Asked by At

So guys i am trying to implement the OnItemSelectedListener to my spinner. The data is retrived from the firebase and added to the arraylist and that array list i added to the adatper

//spinner stufff
//variables:

    Spinner schoolNamesSpinner;
    DatabaseReference databaseReference;
    ArrayList<String> instituteNames;
    ArrayAdapter<String> adapter;


        adapter = new ArrayAdapter<>(studentsLogIn.this,
                android.R.layout.simple_spinner_dropdown_item, instituteNames);

        schoolNamesSpinner.setAdapter(adapter);
        adapter.notifyDataSetChanged();

        **// populating selector;**

        populatingSelecto();

populating the spinner enter image description here

**// populating selector**

private void populatingSelecto() {

    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()) {

                for (DataSnapshot ids : snapshot.getChildren()) {
                    uniqIds.add(ids.getKey());

                }

                for (int i = 0; i < uniqIds.size(); i++) {
                    databaseReference.child(uniqIds.get(i)).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot snapshot) {
                            if (snapshot.exists()) {
                                String name = snapshot.child("INSTITUTE").child("institutionName").
                                        getValue().toString();

                                instituteNames.add(name);


                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError error) {

                        }
                    });
                }

            } else {
                dialogboxMeathod(studentsLogIn.this, "No Institutes on the Record");
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });


}

So, on item selected am trying to show the text of the item selected but its not working

    schoolNamesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(studentsLogIn.this, instituteNames.get(position), Toast.LENGTH_SHORT).show();
        }

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

        }
    });
2

There are 2 answers

5
Danish On

You havent initialise your spinner:

    Spinner schoolNamesSpinner;
    DatabaseReference databaseReference;
    ArrayList<String> instituteNames;
    ArrayAdapter<String> adapter;
   schoolNamesSpinner=findViewById(R.id.your_spinner_id);//this line
   adapter = new ArrayAdapter<>(studentsLogIn.this,
   android.R.layout.simple_spinner_dropdown_item, instituteNames);

      schoolNamesSpinner.setAdapter(adapter);
      adapter.notifyDataSetChanged();

**// populating selector;**

     populatingSelecto();


   schoolNamesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(studentsLogIn.this, instituteNames.getItemAtPosition(position), Toast.LENGTH_SHORT).show();//use getItemAtPosition
    }

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

    }
0
Kiran Reddy On

i had to notify the adapter just after adding stuff

 for (int i = 0; i < uniqIds.size(); i++) {
            databaseReference.child(uniqIds.get(i)).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    if (snapshot.exists()) {
                        String name = snapshot.child("INSTITUTE").child("institutionName").getValue().toString();
                        instituteNames.add(name);
                        // here i have to add the adapter.notifydatachanged
                    }
                }
            }
        }