Как получить доступ к различным данным массива в onItemSelected? - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь реализовать несколько блесен в одном упражнении, которое работает нормально.У меня проблема в том, что когда я пытаюсь вывести их параметры с помощью onItemSelected, я не могу понять, как сказать этому методу, какой спиннер был только что обновлен.Я скопирую код, но вот выдержка из метода onItemSelected.Например, если бы у меня было два счетчика, показывались бы только результаты из счетчика intTypeItems.

    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
    selection.setText(intTypeItems[position]);
}

Вот полный класс, с которым я работаю.

public class Calculator extends Activity implements AdapterView.OnItemSelectedListener {
    private TextView selection;
    private static final Integer[] intNoItems={1,2,3};
    //private static final String[] intNoItems={"one","two","three"};
    private static final String[] intTypeItems={"Seconds","Minutes","Hours","Days"};    

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.calculator);
    Spinner intNo=(Spinner)findViewById(R.id.intervalNo);
    Spinner intType=(Spinner)findViewById(R.id.intervalType);

    intNo.setOnItemSelectedListener(this);
    intType.setOnItemSelectedListener(this);

    selection=(TextView)findViewById(R.id.outPutValues);

    ArrayAdapter<Integer> intNolist=new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_item,intNoItems);
    ArrayAdapter<String> intTypelist=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,intTypeItems);

    intNolist.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    intTypelist.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    intNo.setAdapter(intNolist);
    intType.setAdapter(intTypelist); 
}

public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
    selection.setText(casting + intTypeItems[position]);
}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub
}

}

Один из счетчиков - это int, а другой - строка, поэтому мне также нужно будет разыгратьint в строку при выводе в мой текстовый вид выделения.Что опять же я не знаю, как это сделать, так как приведение может вызвать исключение, когда строка получает обратный вызов?

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Вы должны иметь все, что вам нужно. Посмотри на звонок:

public void onItemSelected(AdapterView<?> parent, View v, int position, long id);

Этот первый параметр, parent, содержит View, к которому принадлежит элемент. В вашем случае это будет либо intNo, либо intType. Если вы сохранили эти переменные как поля, вы можете проверить, в каком Spinner вы были, например:

public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
    if(parent == intNo) {
        selection.setText(casting + intNoItems[position]);   
    } else if(parent == intType) {
        selection.setText(casting + intTypeItems[position]);   
    }
}
1 голос
/ 09 февраля 2012

Вы подключили одного и того же слушателя к обоим счетчикам.Чистым способом можно использовать разных слушателей для каждого из них

 intNo.setOnItemSelectedListener(new FirstListener());
 intType.setOnItemSelectedListener(new SecondListener());

написать два отдельных внутренних класса, FirstListener и SecondListener

ИЛИ

анонимные внутренние классы примерно как ниже

intNo.setOnItemSelectedListener(
    new View.OnClickListener() {
        public void onClick(View v) {
            //Your code here.
        }
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...