Get the String value from Second spinner position

redface :

I have two spinner.

First spinner value is Kathmandu and Bhaktapur and depending on first spinner value, second spinner value is filled up.

My problem is when I select Kathmandu and select first item from second spinner I get the first item of second spinner which is what i expect.

But when I select Bhaktapur or any item below Kathmandu from Spinner first, Then on Selecting first item position from second spinner I get first spinner value itself which Is Bhaktapur instead of "Bageswori"

But if I select second item position then there is no problem i.e I get the "Balkot" which is expected outcome.

So problem lies when I select any item below first item position from First spinner and first item position form second spinner.It returns first item value of First spinner instead of selected value from Second spinner.

My Code is

public class UploadBook extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
   
    String item = "start";
    String condition = "start"; // for spinner
    FirebaseStorage storage;
    public Books b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upload_book);
        getSupportActionBar().setTitle("Upload Room Info");
        getSupportActionBar().setBackgroundDrawable(
                new ColorDrawable(Color.parseColor("#8abe50")));

        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
            ActivityCompat.requestPermissions(UploadBook.this, new String[]{android.Manifest.permission.CAMERA, android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 11);
        database = FirebaseDatabase.getInstance();
        dbreference = database.getReference();
        fauth = FirebaseAuth.getInstance();
        mStorageRef = FirebaseStorage.getInstance().getReference();
       
        b1 = (Button) findViewById(R.id.buttonPost);
        spinnerCountry = (Spinner) findViewById(R.id.spinnerCountry);
        //implementing OnItemSelectedListener (need to override the method)

        countryArray = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
        countryArray.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinnerCountry.setAdapter(countryArray);
        countryArray.add("Kathmandu");
        countryArray.add("Bhaktapur");
        countryArray.add("Lalitpur");
        countryArray.setNotifyOnChange(true);
        spinnerCountry.setSelection(0);
        spinnerDivision = (Spinner) findViewById(R.id.spinnerDivision);
        //implementing OnItemSelectedListener (need to override the method)
        spinnerDivision.setOnItemSelectedListener(this);
        spinnerCountry.setOnItemSelectedListener(this);
        divisionArray = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
        divisionArray.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinnerDivision.setAdapter(divisionArray);

        postButtonClick();


    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        item = parent.getItemAtPosition(position).toString();
        //first spinner item position
        int countrySpinnerPosition = spinnerCountry.getSelectedItemPosition();
        switch (countrySpinnerPosition){
            case 0:
                //fill data for second spinner
                fillKathmanduDivision();
                break;
            case 1:
                //fill data for second spinner
                fillBhaktapurDivision();
                break;          
        }
        //first spinner item position
    }

    private void fillKathmanduDivision() {
        divisionArray.clear();
        divisionArray.add("Anamnagar");
        divisionArray.add("Balaju");
        divisionArray.notifyDataSetChanged();
    }

    private void fillBhaktapurDivision() {
        divisionArray.clear();
        divisionArray.add("Bageswori");
        divisionArray.add("Balkot");
        divisionArray.notifyDataSetChanged();
    }

   b1.setOnClickListener(new View.OnClickListener() {

   }

   void postButtonClick() {

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
         
                     Toast.makeText(this, item, Toast.LENGTH_SHORT).show();
          } 
    }
 }

Hossam Hassan :

Please use this code below :

private String country_id = "", city_id = "";
private ArrayList<String> country_array;

and to fill your array with data :

  for (int i = 0; i < items.getResponse().size(); i++) {
      String get_country_name = items.getResponse().get(i).getCode();
      country_array.add(get_country_name);
      }

Now for your first spinner adapter :

   ArrayAdapter<String> country_spinnerArrayAdapter = new adapter_spinner(getActivity(), R.layout.spinner_header, country_array);
                                    country_spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
                                    binding.etCountry.setAdapter(country_spinnerArrayAdapter);
                                    binding.etCountry.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                                        @Override
                                        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                                            String selectedItemText = parent.getSelectedItem().toString();
                                            if (position > 0) {
                                                country_id = selectedItemText;
                                                city_id = "";
                                                Load_City(position - 1); // -1 to remove postion of the static country text
                                            }
                                        }

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

Now your City (2nd spinner) method :

   private void Load_City(int postion) {
        ArrayList<String> city_array = new ArrayList<String>();
        city_array.add(getString(R.string.city));



        for (int i = 0; i < items.getResponse().get(postion).getCities().size(); i++) {
            String get_city_name = items.getResponse().get(postion).getCities().get(i).getName();
            city_array.add(get_city_name);

        }

        ArrayAdapter<String> country_spinnerArrayAdapter = new adapter_spinner(getActivity(), R.layout.spinner_header, city_array);
        country_spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
        binding.etCity.setAdapter(country_spinnerArrayAdapter);

        binding.etCity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String selectedItemText = parent.getSelectedItem().toString();
                if (position > 0) {
                    city_id = selectedItemText;
                }
            }

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

i hope this helped

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=106193&siteId=1