【发布时间】:2011-04-25 02:12:50
【问题描述】:
我试图让 onClickListener 在 Spinner 上触发,但出现以下错误:
Java.lang.RuntimeException 是“不要为 AdapterView 调用 setOnClickListener。您可能需要 setOnItemClickListener”
我确定我想调用 onClickListener 而不是 onItemClickListener。我在 Stack Overflow 上发现了其他人提出的问题,Is there a way to use setOnClickListener with an Android Spinner?
答案是:
您必须设置 Click 底层视图上的监听器 (通常是一个带有 id 的 TextView: android.R.id.text1) 的微调器。到 这样做:
在 构造函数(带属性)创建 通过提供布局的微调器 android.R.layout.simple_spinner_item 做一个 findViewById(android.R.id.text1) 获取 TextView 现在设置 onClickListener 到 TextView
我已经尝试了那里提到的答案,但它似乎不起作用。执行 findViewById() 后,我得到一个指向 TextView 的空指针。
这就是我正在做的:
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"/>
我做错了什么?
我是 StackOverflow 的新手,我没有找到任何方法可以在其他线程中发布附加问题(或评论,因为我必须很少代表)所以我开始了一个新问题。
根据建议,我尝试了这个:
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 上对此进行了测试,结果相同。
【问题讨论】:
标签: java android onclick spinner