我的onTouchListener无法正常工作

时间:2012-09-06 14:47:04

标签: android spinner

对不起我的英语不好但是我的意大利语。我有一个微调器,我希望当它被禁用时,一个吐司显示。但我不能让它发挥作用!我正在使用另一个onTouchListener并且它运行良好,但是这个监听器不起作用。

这是我的代码:

private void buildSpinnerOrdinata(String element) {
    spinnerOrdinata=null;
    spinnerOrdinataArray=new ArrayList<String>();
    spinnerOrdinataArrayAdapter=null;
    try {
        if(element.equals(""))
            spinnerOrdinataArray.add("Seleziona un'ordinata");
        else
            spinnerOrdinataArray=databaseHelper.getOrdinataCpmAnalysis(element);

        spinnerOrdinata = (Spinner) findViewById(R.id.spinnerOrdinata);
        if(addingRecord==true){
            spinnerOrdinataArray.add(0, "Seleziona un'ordinata");
        }
        spinnerOrdinataArrayAdapter = new ArrayAdapter<String>(this, R.layout.spinner, spinnerOrdinataArray);
        spinnerOrdinataArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerOrdinata.setAdapter(spinnerOrdinataArrayAdapter);
        if(addingRecord==true){
            spinnerOrdinata.setOnTouchListener(null);
            spinnerOrdinata.setOnTouchListener(SpinnerOrdinataOnTouch);
        }
        if(tabellaGiaScelta==false&&addingRecord==true){
            spinnerOrdinata.setOnTouchListener(null);
            spinnerOrdinata.setEnabled(false);
            spinnerOrdinata.setOnTouchListener(disabledSpinnerOnTouch);
        }
        else{
            spinnerOrdinata.setEnabled(true);
            spinnerOrdinata.setOnTouchListener(null);
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



}

这是我的倾听者:

private View.OnTouchListener disabledSpinnerOnTouch=new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
                Toast.makeText(getApplicationContext(), "Non è possibile selezionare questo campo, è disabilitato", Toast.LENGTH_SHORT).show();
                Spinner spinnerOr=(Spinner)findViewById(R.id.spinnerOrdinata);
                spinnerOr.performClick();
            }
            return true;
        }
};

哪里出错?谢谢!

1 个答案:

答案 0 :(得分:3)

因为您通过调用setEnabled(false)禁用了微调器。之后,它不会听取触摸事件。

我会扩展Spinner类并使用一个方法来创建我自己的实现,这个方法可能是重写的PeformClick方法,如果你想显示Spinner项目,你可以调用父版本,或者你不会调用父版本而是调用你的吐司告诉用户它已被禁用

这是如何做到的。

public class CustomSpinner extends Spinner{

private boolean mEnabled;
private final Toast mDisabledToast;

public CustomSpinner(Context context, AttributeSet attrs) {
    super(context, attrs);
    mDisabledToast = Toast.makeText(context, "Non è possibile selezionare questo campo, è disabilitato", Toast.LENGTH_SHORT);
}

@Override
public boolean performClick() {
    if(mEnabled)
        return super.performClick();
    else {
        mDisabledToast.show();
        return true;
    }
}

@Override
public void setEnabled(boolean enabled){
    mEnabled = enabled;
}

}

不要忘记在布局xml而不是基本Spinner类中使用新创建的CustomSpinner类。你可以这样做:

        <com.example.CustomSpinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />