одна кнопка для нескольких вещей - PullRequest
0 голосов
/ 26 февраля 2019

Я просто хочу реализовать одну кнопку для выполнения нескольких действий, например, при первом нажатии сделать Textview1 видимым и при втором щелчке сделать Textview2 видимым и т. Д.

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

    final TextView textView_r4 = findViewById(R.id.tv_r4);
    final EditText editText_r4 = findViewById(R.id.input_R4);
    final TextView textView_r5 = findViewById(R.id.tv_r5);
    final EditText editText_r5 = findViewById(R.id.input_R5);

    findViewById(R.id.Addbtn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            textView_r4.setVisibility(View.VISIBLE);
            editText_r4.setVisibility(View.VISIBLE);
        }
    });

    findViewById(R.id.Addbtn).setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            textView_r5.setVisibility(View.VISIBLE);
            editText_r5.setVisibility(View.VISIBLE);
            return true;
       }
    });

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете добавить состояние enum, чтобы отслеживать, в каком состоянии находится ваша кнопка. Создайте поле класса в том же классе (мероприятии), в котором находятся эти методы, и меняйте состояние при каждом нажатии.Затем в методе .setOnClickListener вы можете проверить, в каком состоянии находится кнопка, и в зависимости от этого выполнять различные действия.

private State state = INITIAL;

findViewById(R.id.Addbtn).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch (state) {
            case INITIAL:
                // do first action
                state = State.CLICKED_ONCE;
                break;
            case CLICKED_ONCE:
                // do second action
                state = State.CLICKED_TWICE;
                break;
            default:
                // clicked too many times, no action taken
                break;
        }
    }
});

private enum State { INITIAL, CLICKED_ONCE, CLICKED_TWICE }
...