从第二个微调器位置获取字符串值
Get the String value from Second spinner position
我有两个微调器。
第一个微调器值是加德满都和巴克塔普尔,根据第一个微调器值,第二个微调器值被填满。
我的问题是,当我 select Kathmandu 和 select 来自第二个微调器的第一项时,我得到了第二个微调器的第一项,这正是我所期望的。
但是当我首先从 Spinner select Bhaktapur 或加德满都下方的任何项目,然后从第二个 Spinner 选择第一个项目位置时,我得到第一个 Spinner 值本身,它是 Bhaktapur 而不是 "Bageswori"
但是如果我 select 第二项位置那么就没有问题,即我得到 "Balkot" 这是预期的结果。
所以问题出在我 select 第一个微调器的第一个项目位置下方的任何项目和第二个 spinner.It returns 第一个微调器的第一个项目值而不是 select 来自第二个微调器的值。
我的密码是
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();
}
}
}
您对第一个微调器的引用有误。
下一行
int countrySpinnerPosition = spinnerCountry.getSelectedItemPosition();
您选择了 spinnerCountry 而不是 spinnerFirst。
并且您最初将 spinnerFirst 设置为 A 的第一个位置,当您将其更改为 select B 时,其值未被考虑onItemSelected
方法,采用国家 selected 的意图可能在微调器的 第一 (0) 位置,因此您的第二个微调器始终设置为三而不是四。
请使用下面的代码:
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) {
}
});
}
希望对您有所帮助
我有两个微调器。
第一个微调器值是加德满都和巴克塔普尔,根据第一个微调器值,第二个微调器值被填满。
我的问题是,当我 select Kathmandu 和 select 来自第二个微调器的第一项时,我得到了第二个微调器的第一项,这正是我所期望的。
但是当我首先从 Spinner select Bhaktapur 或加德满都下方的任何项目,然后从第二个 Spinner 选择第一个项目位置时,我得到第一个 Spinner 值本身,它是 Bhaktapur 而不是 "Bageswori"
但是如果我 select 第二项位置那么就没有问题,即我得到 "Balkot" 这是预期的结果。
所以问题出在我 select 第一个微调器的第一个项目位置下方的任何项目和第二个 spinner.It returns 第一个微调器的第一个项目值而不是 select 来自第二个微调器的值。
我的密码是
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();
}
}
}
您对第一个微调器的引用有误。
下一行
int countrySpinnerPosition = spinnerCountry.getSelectedItemPosition();
您选择了 spinnerCountry 而不是 spinnerFirst。
并且您最初将 spinnerFirst 设置为 A 的第一个位置,当您将其更改为 select B 时,其值未被考虑onItemSelected
方法,采用国家 selected 的意图可能在微调器的 第一 (0) 位置,因此您的第二个微调器始终设置为三而不是四。
请使用下面的代码:
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) {
}
});
}
希望对您有所帮助