Получить значение String из позиции второго счетчика - PullRequest
0 голосов
/ 16 января 2019

У меня есть два счетчика.

Значение первого счетчика - Катманду и Бхактапур, и в зависимости от значения первого счетчика, значение второго счетчика заполняется.

Моя проблема в том, что когда я выбираю Катманду и выбираю первый предмет из второго вращателя, я получаю первый предмет второго вращателя, что я и ожидаю.

Но когда я выбираю Бхактапур или любой предмет ниже Катманду из Спиннера, то при выборе первой позиции предмета из второго обтекателя я получаю само значение первого обтекателя - Бхактапур, а не «Багесвори»

Но если я выберу позицию второго предмета, то проблем не возникнет, т. Е. Я получу «Балкот», который является ожидаемым результатом.

Таким образом, проблема заключается в том, что я выбираю любой элемент ниже позиции первого элемента из первого счетчика, а позицию первого элемента из второго счетчика. Он возвращает значение первого элемента первого счетчика вместо выбранного значения из второго счетчика.

Мой код

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();
          } 
    }
 }

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Пожалуйста, используйте этот код ниже:

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

и заполнить ваш массив данными:

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

Теперь для вашего первого адаптера блесны:

   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) {
                                        }
                                    });

Теперь ваш город (2-й счетчик) метод:

   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) {
            }
        });
    }

надеюсь, это помогло

0 голосов
/ 16 января 2019

Вы ошиблись ссылкой на первый счетчик.

в нижней строке

int countrySpinnerPosition = spinnerCountry.getSelectedItemPosition();

вы выбрали spinnerCountry вместо spinnerFirst. И вы первоначально установили spinnerFirst на первое положение, которое A , и когда вы измените его, чтобы выбрать B его значение не берется в методе onItemSelected, намерение принимает выбранную страну, которая является вероятно, на first (0) положение счетчика, так что для второго счетчика всегда установлено значение Three вместо Four.

...