我正在尝试在android中实现一个微调器。我想为spinner中的一个特定项目触发相同选择的事件。项目的重放行为与常规微调器的行为相同。 任何帮助都会非常感激。谢谢。
setSelection(int position)
{
boolean sameSelected = position == getSelectedItemPosition();
super.setSelection(position);
if (sameSelected) {
getOnItemSelectedListener().onItemSelected(this,getSelectedView(),position,getSelectedItemId());
}
}
此代码在' if'内的getOnitemSelectedListener行中给出了NuLLpointer异常。声明
答案 0 :(得分:0)
使用扩展的微调器,它将使旧选择无效,并且事件将再次触发 -
public class SpinnerTrigger extends Spinner {
public SpinnerTrigger(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public void setSelection(int position, boolean animate) {
ignoreOldSelectionByReflection();
super.setSelection(position, animate);
}
private void ignoreOldSelectionByReflection() {
try {
Class<?> c = this.getClass().getSuperclass().getSuperclass().getSuperclass();
Field reqField = c.getDeclaredField("mOldSelectedPosition");
reqField.setAccessible(true);
reqField.setInt(this, -1);
} catch (Exception e) {
Log.d("Exception Private", "ex", e);
// TODO: handle exception
}
}
@Override
public void setSelection(int position) {
ignoreOldSelectionByReflection();
super.setSelection(position);
}
}
干杯:)
答案 1 :(得分:0)
当您再次单击当前选定的项目时,它无法触发任何事件。因此,您无法捕获setOnItemSelectedListener以供微调器响应。
答案 2 :(得分:0)
空指针的原因是getselectedview()返回null,因为它是第一次设置项目而没有选择任何内容。同样对于特定项目相同的选择我在if语句中添加了另一个条件作为位置== 3.现在它的工作正常。谢谢。