0

对不起我的英语不好,但我是意大利人。我有一个微调器,当它被禁用时,我想要一个祝酒词。但我不能让它工作!我正在使用另一个 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;
        }
};

错误在哪里?谢谢!

4

1 回答 1

3

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

我将扩展 Spinner 类并仅使用一种方法来实现我自己的实现,该方法将是被覆盖的 PeformClick 方法,如果您想显示 Spinner 项目,您将调用父版本,或者您不会调用父版本,而是您的 toast 告诉您被禁用的用户

这是可以做到的。

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 中使用新创建的 CustomSpinner 类而不是基本 Spinner 类。你可以这样做:

        <com.example.CustomSpinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
于 2012-09-06T14:51:12.083 回答