используя как onTouch, так и onClick на кнопке в Android

У меня есть Button, который всякий раз, когда пользователь нажимает на него, увеличивает число в моем EditText, но я хочу иметь метод onTouch, который, когда пользователь держит палец на кнопке, число увеличивается с большей скоростью (непрерывно), что-то вроде назад, что когда вы щелкаете по нему, он удаляет только одну букву, а когда вы держите его нажатым, он удаляет слова быстрее, поэтому в моем коде есть и ontouch, и onclick, но всякий раз, когда я нажимаю кнопку, срабатывает только onTouch, что мне делать? делать? кто-нибудь может помочь, пожалуйста? Я много искал, но не смог найти ничего, что мне помогло бы

Вот часть моего кода

     btnFineUp.setOnTouchListener (this);   
            btnFineUp.setOnClickListener (this);

    @override
            public void onClick (View view)
        {
            switch (view.getId ())
            {
                case R.id.btn_fine_up:

                {
                    View     v = findViewById (getCurrentFocus ().getId ());
                    EditText editText;

                    if (v instanceof EditText)
                    {
                        editText = (EditText) v;
                    }
                    else
                    {
                        return;
                    }
                    int calcStateAmp   = +1;

                     if (view.getId () == R.id.btn_fine_up)
                    {
                        calcState_2 = upAndDown.getFineUpAmp () * calcStateAmp;

                        calcStateAmp = calcState_2;

                    }
                    double currentValue;
                    if (StringUtils.isNullOrEmpty (editText.getText ().toString ()))
                    {
                        currentValue = 0;
                    }
                    else
                    {
                        currentValue = Double.parseDouble (editText.getText ().toString ());
                    }
                    switch (getCurrentFocus ().getId ())
                    {
                        case R.id.txt_va1_a:
                        case R.id.txt_va2_a:
                        case R.id.txt_va3_a:
                        case R.id.txt_vb1_a:

                            editText.setText (String.format (Locale.ENGLISH, "%.2f", currentValue + (0.01 * calcStateAmp)));
                            break;
    }


        @Override
        public boolean onTouch (View view, MotionEvent motionEvent)
        {
                switch (view.getId ())
                {
                    case ir.vebko.R.id.btn_fine_up:

                    {
                        View     v = findViewById (getCurrentFocus ().getId ());
                        EditText editText;

                        if (v instanceof EditText)
                        {
                            editText = (EditText) v;
                        }
                        else
                        {
                            return false;
                        }
                        int calcStateAmp   = +1;



             if (view.getId () == R.id.btn_fine_up)
                        {
                            calcStateAmp = calcState_2;

                        }
                        double currentValue;
                        if (StringUtils.isNullOrEmpty (editText.getText ().toString ()))
                        {
                            currentValue = 0;
                        }
                        else
                        {
                            currentValue = Double.parseDouble (editText.getText ().toString ());
                        }

                        switch (getCurrentFocus ().getId ())
                        {
                            case ir.vebko.R.id.txt_va1_a:
                            case ir.vebko.R.id.txt_va2_a:
                            case ir.vebko.R.id.txt_va3_a:
                            case ir.vebko.R.id.txt_vb1_a:

                                editText.setText (String.format (Locale.ENGLISH, "%.2f", currentValue + (0.01 * calcStateAmp)));
                                break;
    }
return true;
}

person Reihaneh Khaksaran    schedule 08.07.2017    source источник
comment
Верните false, возможно, это поможет вам использовать как onTouch, так и по клику   -  person Mohammad Arman    schedule 08.07.2017


Ответы (1)


OnTouch сам обрабатывает действие пользователя по клику для OnClick. Таким образом, действие пользователя по щелчку сначала вызывает событие OnTouch; только когда нет прослушивателя, слушающего OnTouch, он вызывает событие OnClick. Поскольку у вас есть OnTouchListener, связанный с событием OnTouch, ваше OnClickListener никак не будет вызвано. Дополнительные сведения см. в этом вопросе. .

Из вашего вопроса кажется, что вы можете вообще пропустить View.OnTouchListener и вместо этого реализовать как View.OnLongClickListener и View.OnClickListener.

Надеюсь, это поможет.

person Rajan Prasad    schedule 13.11.2017