У меня есть два счетчика в моей системе. Теперь я должен изменить выбранное значение второго счетчика в зависимости от первого значения счетчика. Как только пользователь изменит значение 1-го счетчика, второе значение счетчика будет установлено автоматически в зависимости от выбранного 1-го счетчика. Как это реализовать?
Spinner on value Изменить
Ответ 1
Из Hello Spinner:
Теперь создайте вложенный класс, который реализует AdapterView.OnItemSelectedListener. Это обеспечит метод обратного вызова, который будет уведомлять ваше приложение, когда элемент был выбран из Spinner. Вот как выглядит этот класс:
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
Toast.makeText(parent.getContext(), "The planet is " +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}
Для AdapterView.OnItemSelectedListener требуются методы обратного вызова onItemSelected() и onNothingSelected(). Первый вызывается, когда выбирается элемент из AdapterView, и в этом случае короткое сообщение Toast отображает выделенный текст; и последний вызывается, когда выбор исчезает из AdapterView, чего не происходит в этом случае, поэтому он игнорируется. Теперь MyOnItemSelectedListener необходимо применить к Spinner. Вернитесь к методу onCreate() и добавьте следующую строку в конец: spinner.setOnItemSelectedListener(новый MyOnItemSelectedListener());
Другими словами, вам нужно создать OnItemSelectedListener, который изменяет значение второго счетчика и присоединяет его к первому счетчику.
Ответ 2
Вы должны поставить условие на onItemSelected самого первого счетчика. В этом примере вы можете получить значение 2-го счетчика в зависимости от 1-го счетчика:
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
if(arg0.equals(spin0)){
spin1.setClickable(true);
if(spin0.getSelectedItem().equals("India"))
{
ArrayAdapter <String> s1 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_india);
s1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(s1);
}
else if(spin0.getSelectedItem().equals("Pakistan"))
{
ArrayAdapter <String> s2 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_pak);
s2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(s2);
}
else if(spin0.getSelectedItem().equals("China"))
{
ArrayAdapter <String> s3 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_china);
s3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(s3);
}
}
}
Ответ 3
Вы должны определить onItemSelected() отдельно для каждого счетчика. В противном случае код запускается, если что-либо выбирается из обоих прядильщиков.
newCategory.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
String selCat = newCategory.getItemAtPosition(arg2).toString();
if (selCat != "New")
{
loadSpinnerData(topic);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
newTopic.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
loadSpinnerData()
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});