0

私の悪い英語で申し訳ありませんが、'imイタリア語。私はスピナーを持っていて、それが無効になっているときにトーストが表示されます。しかし、私はそれを機能させることはできません!別の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メソッドである1つのメソッドのみを使用して独自の実装を作成します。ここで、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;
}

}

基本のSpinnerクラスの代わりに、レイアウトxmlで新しく作成されたCustomSpinnerクラスを使用することを忘れないでください。あなたはこのようにそれを行うことができます:

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