Многократное нажатие кнопки - PullRequest
0 голосов
/ 23 мая 2019

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

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private Button button1, button2;
private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button1 = findViewById(R.id.button1);
    button2 = findViewById(R.id.button2);
    textView = findViewById(R.id.textView);
    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
}
private long mLastClickTime = 0;

@Override
public void onClick(View v) {
    if (System.currentTimeMillis() - mLastClickTime < 1000) {
        textView.setText("Double Action");
        SPLogger.logMassage("Same", (System.currentTimeMillis() - mLastClickTime) + "");
        return;
    }
    mLastClickTime = System.currentTimeMillis();
    SPLogger.logMassage("notSame", System.currentTimeMillis() + "");

    if (v.getId() == R.id.button1) {
        textView.setText("Only First Action");
    } else if (v.getId() == R.id.button2) {
        textView.setText("Only Second Action");

    }
}
}

Этот код почти работает, но у меня есть одна маленькая проблема.Когда я быстро нажимаю, например, на первую кнопку, она работает как действие в то же время.Может кто-нибудь сказать мне, что не так в моем коде?Также Каков лучший способ проверить тот же клик в Android?Спасибо

Ответы [ 3 ]

0 голосов
/ 23 мая 2019

Я только что проверил это, и это сработало:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

Button button1, button2;
private boolean buttonClicked;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button1 = findViewById(R.id.button1);
    button2 = findViewById(R.id.button2);

    button1.setOnClickListener(this);
    button2.setOnClickListener(this);

}

@Override
public void onClick(View v) {

    if (!buttonClicked) {

                new Handler().postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        buttonClicked = false;
                    }
                }, 100); //100ms 
            }
            else{

        Toast.makeText(this, "Both Clicked !", Toast.LENGTH_SHORT).show();

    }


    switch (v.getId()) {

        case R.id.button1:
            buttonClicked=true;
            //do whatever functions you want here
            break;


        case R.id.button2:
            buttonClicked=true;
            //do whatever functions you want here
            break;

    }

}
}

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

0 голосов
/ 23 мая 2019

это тоже похоже на работу:

@Override
public void onClick(View v) {
    String TAG = "myTag";
    if(System.currentTimeMillis() - 200 >= lastClick){
        if(btn1.isPressed() && btn2.isPressed()){
            Log.i(TAG, "onClick: both");
        }else if(v.getId() == R.id.button1){
            Log.i(TAG, "onClick: button 1");
        }else if(v.getId() == R.id.button2){
            Log.i(TAG, "onClick: button 2");
        }
        lastClick = System.currentTimeMillis();
    }
}

Время 200 миллисекунд предотвращает двойной вызов контента onClick

0 голосов
/ 23 мая 2019

Вы должны проверить, является ли второй щелчок другой кнопкой, кроме первого, поэтому вам нужно сохранить в переменной последнюю нажатую кнопку. Пример

private long mLastClickTime = 0;
private int mLastClickedID = -1;

@Override
public void onClick(View v) {
    if (System.currentTimeMillis() - mLastClickTime < 1000 && mLastClickedID !=v.getId()) {
        textView.setText("Double Action");
        SPLogger.logMassage("Same", (System.currentTimeMillis() - mLastClickTime) + "");
        return;
    }
    mLastClickTime = System.currentTimeMillis();
    mLastClickedID = v.getId()
    SPLogger.logMassage("notSame", System.currentTimeMillis() + "");

    if (v.getId() == R.id.button1) {
        textView.setText("Only First Action");
    } else if (v.getId() == R.id.button2) {
        textView.setText("Only Second Action");

    }
}
...