从第二个微调器位置获取String值

时间:2019-01-16 05:20:54

标签: java android spinner android-spinner

我有两个微调器。

第一个微调器值为加德满都和巴克塔普尔,并且根据第一个微调器值,将填充第二个微调器值。

我的问题是,当我选择加德满都并从第二个微调器中选择第一项时,我得到了第二个微调器的第一项,这正是我所期望的。

但是当我首先从Spinner中选择Bhaktapur或加德满都以下的任何项目时,然后在从第二个Spinner中选择第一个项目位置时,我得到的第一个Spinner值本身就是Bhaktapur而不是“ Bageswori”

但是,如果我选择第二个项目的位置,那么就没有问题,即我得到了预期结果的“ Balkot”。

所以问题出在当我从第一微调器的第一项位置下方选择任何项并且从第二微调器的第一项位置中选择任何项时,它返回第一微调器的第一项值而不是第二微调器中的选定值。

我的代码是

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 :(得分:1)

请在下面使用此代码:

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

现在是您的城市(第二个微调器)方法:

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

我希望这对您有帮助

答案 1 :(得分:0)

您对第一个微调器的引用错误。

在下面的行

int countrySpinnerPosition = spinnerCountry.getSelectedItemPosition();

您选择了spinnerCountry而不是spinnerFirst。 并且您最初已将spinnerFirst设置为 A 的第一个位置,并进行更改-选择 B 时,其值未在onItemSelected方法中使用,表示需要选择的国家/地区可能位于微调框的第一(0)位置,因此您的第二个微调框始终设置为3,而不是4。