Я пытаюсь заставить onClickListener запускать Spinner, но получаю следующую ошибку:
Java.lang.RuntimeException: «Не вызывайте setOnClickListener для AdapterView. Возможно, вместо этого вам нужен setOnItemClickListener»,
Я уверен, что хочу вызвать onClickListener, а НЕ onItemClickListener. Я нашел вопрос, заданный кем-то другим в Stack Overflow: Есть ли способ использовать setOnClickListener с Android Spinner?< /эм>
Ответ указан там:
Вам нужно будет установить прослушиватель кликов в базовом представлении (обычно это TextView с идентификатором: android.R.id.text1) счетчика. Для этого:
Создайте собственный счетчик. В конструкторе (с атрибутами) создайте счетчик, указав макет android.R.layout.simple_spinner_item. Сделайте findViewById(android.R.id.text1), чтобы получить TextView. Теперь установите onClickListener в TextView.
Я попробовал ответ, указанный там, но, похоже, он не работает. Я получаю нулевой указатель на TextView после выполнения findViewById().
Вот что я делаю:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.layoutspinner,dataArray);
spinner.setAdapter(adapter);
TextView SpinnerText = (TextView)findViewById(R.id.spinnerText);
if (SpinnerText == null) {
System.out.println("Not found");
}
else {
SpinnerText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//Do something
}
});
}
Файл layoutspinner.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerText"
android:singleLine ="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="6pt"
android:gravity="right"/>
Что я делаю неправильно?
Я новичок в Stack Overflow, я не нашел способа опубликовать дополнительный вопрос в другой ветке (или прокомментировать, так как у меня мало представителей), поэтому я начал новый вопрос.
По рекомендации я попробовал это:
int a = spinnerMes.getCount();
int b = spinnerMes.getChildCount();
System.out.println("Count = " + a);
System.out.println("ChildCount = " + b);
for (int i = 0; i < b; i++) {
View v = spinnerMes.getChildAt(i);
if (v == null) {
System.out.println("View not found");
}
else {
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Click code
}
});
}
}
Но LogCat не не показывает многообещающих результатов.
10-14 16:09:08.127: INFO/System.out(3116): Count = 7
10-14 16:09:08.127: INFO/System.out(3116): ChildCount = 0
Я тестировал это на уровнях API 7 и 8 с теми же результатами.