Не нажимаемая кнопка входит в метод onClick - PullRequest
0 голосов
/ 14 ноября 2011

Я испытываю странное поведение с одной кнопкой в ​​Android.

Я создал пользовательскую кнопку (MyButton) и добавил несколько методов для ее расширения по умолчанию, например добавление метода отключения / включения.чтобы изменить кнопку.

Вот код MyButton:

public class MyButton extends Button {
    /** Enabled. */
    private boolean enabled = true;

    /** The default bg. */
    private Drawable defaultBG = null;

    /** The disabled drawable. */
    private int disabledDrawable = 0;

    /******************/
    /** CONSTRUCTORS **/
    /**     [...]    **/
    /******************/

    /**
     * Disable.
     */
    public void disable()
    {
        this.setClickable(false);
        this.setFocusable(false);
        Log.d("MY_BUTTON", "DISABLED!!");
        if(!enabled || disabledDrawable == 0)
            return;

        defaultBG = this.getBackground();
        this.setBackgroundResource(disabledDrawable);

        enabled = false;
    }

    /**
     * Enable.
     */
    public void enable()
    {
        this.setClickable(true);
        this.setFocusable(true);
        Log.d("MY_BUTTON", "ENABLED!!");
        if(enabled)
            return;

        this.setBackgroundDrawable(defaultBG);

        enabled = true;
    }
}

Вот мое объявление Button в макете:

<com.xxxx.library.View.MyButton
                    android:id="@+id/buttonVideo"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:text="@string/upload_camera_video" />

, и это то, что я делаю вмоя активность:

@Override
public void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.upload);
    super.onCreate(savedInstanceState);
    cameraVideo = (MyButton) findViewById(R.id.buttonVideo);
    cameraVideo.setDisabledBG(R.drawable.disabled_buttons);
    cameraVideo.diable();

    cameraVideo.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if(!v.isClickable())
            {
                log("NOT CLICKABLE!!!");
                return;
            }

            log("CLICKABLE!!!");
        }
    });
}

И результат в logcat таков:

11-14 11:33:37.681: D/MY_BUTTON(6800): DISABLED!!
11-14 11:33:43.446: D/UploadActivity(6800): CLICKABLE!!!

Кнопки кажутся отключенными, но все равно принимает события щелчка, хотя у него есть отключенный фон, который я ему назначилэто не фокусируется.

1 Ответ

5 голосов
/ 14 ноября 2011

Вам нужно использовать метод setEnabled(false), чтобы отключить кнопку.

...