Nano Hash - криптовалюты, майнинг, программирование

Кнопка переключения, отключить изменение состояния onClick

Я хочу использовать кнопку переключения, но я хочу отключить статус изменения при щелчке пусть это изменится только на опцию перетаскивания. Я пытаюсь настроить прослушиватель onclick так, чтобы он ничего не делал, но когда я нажимаю кнопку, всегда меняю состояние.

Кто-нибудь знает, как отключить статус изменения onClick?


  • использовать button.setClickable(false) 20.01.2014
  • Но если я установил clickable (false), я не могу перетащить переключатель 20.01.2014
  • вы можете использовать событие onTouch для перетаскивания... 20.01.2014
  • если я устанавливаю clickable в false, событие ontouch получает только события action_down 20.01.2014

Ответы:


1

Если вы хотите изменить состояние переключателя только с помощью смахивания, выполните следующие действия:

 switchbutton = view.findViewById(R.id.switch2);
    switchbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switchbutton.setChecked(!switchbutton.isChecked());
        }
    });
02.01.2018

2

Используя виджет переключения, вам нужно будет создать свой класс customSwitch и переопределить метод onTouchEvent, чтобы он возвращал true при обнаружении щелчка:

public boolean onTouchEvent(MotionEvent ev) {
    boolean response;
    switch (ev.getAction()){
        case MotionEvent.ACTION_DOWN:
            x = ev.getX();
            response = super.onTouchEvent(ev);
            break;
        case MotionEvent.ACTION_UP:
            response = Math.abs(x - ev.getX()) <= 10 || super.onTouchEvent(ev);
            break;
        default:
            response = super.onTouchEvent(ev);
            break;
    }
    return response;
}

Число 10 является допустимым значением, так как некоторые устройства сообщают о событии движения на 3 или 6 пикселей или около того вместо щелчка, поэтому с этим вы контролируете: 10 пикселей или меньше — это щелчок (и игнорируйте его), или большее расстояние считается движением и пусть это движение пройдет через нормальное поведение переключателя.

Объявите x как переменную уровня класса, значение по умолчанию равно 0. MotionEvent.ACTION_DOWN всегда вызывается первым, поэтому у вас будет x с начальным значением на оси X MotionEvent.

01.10.2016
  • x не инициализируется в методе. где инициализировать x и что поставить в качестве значения по умолчанию? 20.08.2018

  • 3

    используйте кнопку переключения вместо Button

    xml для кнопки переключения

    <ToggleButton 
        android:id="@+id/togglebutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    

    в классе Java

    ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
    toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                // The toggle is enabled
            } else {
                // The toggle is disabled
            }
        }
    });
    
    20.01.2014
  • Я использую кнопку переключения, а не кнопку. Я хочу отключить функцию изменения состояния при нажатии и разрешить эту функцию только в событии перетаскивания. 20.01.2014
  • Вы также можете использовать это для кнопки переключения 20.01.2014
  • Да, но проблема та же самая, когда вы нажимаете кнопку, эта кнопка меняет свое состояние (включено-выключено, выключено-включено), а затем входит в эту функцию (в этом случае onToggleClicked). Я хочу предотвратить/устранить изменение состояния при нажатии 20.01.2014

  • 4
    //onClickListener
    public void tglOnClick(View v) {
        ToggleButton tgl = (ToggleButton) v;
    
        //do something based on toggle status after clicking
        if (tgl.isChecked())
            //do something
        else
            //do something else
    
        //revert button state so that it can be controlled by some external logic
        tgl.setChecked(!tgl.isChecked());
    

    }

    Это сработало для меня. В моем случае нажатие на кнопку-переключатель отправило запрос службе, и если служба ответила «ОК», обработчик сообщений установил правильное состояние кнопки-переключателя.

    02.03.2016

    5

    4 года спустя нашел решение довольно чистое и простое для этого варианта использования:

    Создайте свой собственный переключатель и переопределите метод executeClick(), эта часть позволяет избежать реакции CompoundButton на щелчок:

    class CustomSwitch @JvmOverloads constructor(
        context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : SwitchMaterial(context, attrs, defStyleAttr) {
    
        override fun performClick(): Boolean {
            return false
        }
    }
    

    Вторая часть — запретить наследование TextView реагировать на щелчок, и для этого просто добавьте это в свой XML:

    android:textIsSelectable="false"
    
    05.07.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..