多个按钮点击事件
Multiple button click event
我有两个按钮,每个按钮都有各自的功能,但我还想在用户同时单击这些按钮时添加另一个功能。这是我的代码:
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 同时点击的最佳方法是什么?
谢谢
您必须检查第二次点击是否来自第一次点击以外的其他按钮,因此您必须将最后一次点击的按钮保存在变量中。
示例
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");
}
}
我刚刚测试了这个并且它有效:
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;
}
}
}
希望对您有所帮助!
这似乎也有效:
@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内容被调用两次
我有两个按钮,每个按钮都有各自的功能,但我还想在用户同时单击这些按钮时添加另一个功能。这是我的代码:
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 同时点击的最佳方法是什么? 谢谢
您必须检查第二次点击是否来自第一次点击以外的其他按钮,因此您必须将最后一次点击的按钮保存在变量中。 示例
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");
}
}
我刚刚测试了这个并且它有效:
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;
}
}
}
希望对您有所帮助!
这似乎也有效:
@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内容被调用两次