Spinner android只为一个特定项目选择相同的项目

时间:2015-01-07 07:53:51

标签: android android-layout android-spinner

我正在尝试在android中实现一个微调器。我想为spinner中的一个特定项目触发相同选择的事件。项目的重放行为与常规微调器的行为相同。 任何帮助都会非常感激。谢谢。

setSelection(int position)
{
   boolean sameSelected = position == getSelectedItemPosition();
   super.setSelection(position);
   if (sameSelected) {
             getOnItemSelectedListener().onItemSelected(this,getSelectedView(),position,getSelectedItemId());
}
}

此代码在' if'内的getOnitemSelectedListener行中给出了NuLLpointer异常。声明

3 个答案:

答案 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.现在它的工作正常。谢谢。

相关问题