J'utilise deux boutons en vue. Lorsque vous cliquez simultanément sur deux boutons, vous passez d’une activité à la fois. Comment éviter cela?
J'ai essayé comme ça, mais ça ne marche pas s'il te plaît sauve ....
public class MenuPricipalScreen extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu_principal_layout);
findViewById(R.id.imageView2).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
disable(findViewById(R.id.imageView3));
Intent intent = new Intent(MenuPricipalScreen.this,
SelectYourLanguageVideo.class);
startActivity(intent);
}
});
findViewById(R.id.imageView3).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
disable(findViewById(R.id.imageView2));
Intent intent = new Intent(MenuPricipalScreen.this,
CategoryScreen.class);
intent.putExtra("request", "false");
startActivity(intent);
}
});
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
((ImageView) findViewById(R.id.imageView3)).setEnabled(true);
((ImageView) findViewById(R.id.imageView2)).setEnabled(true);
((ImageView) findViewById(R.id.imageView3)).setClickable(true);
((ImageView) findViewById(R.id.imageView2)).setClickable(true);
((ImageView) findViewById(R.id.imageView3)).setFocusable(true);
((ImageView) findViewById(R.id.imageView2)).setFocusable(true);
}
private void disable(View v) {
Log.d("TAG", "TAG" + v.getId());
v.setEnabled(false);
v.setClickable(false);
v.setFocusable(false);
}
}
Merci,
Pour éviter les clics multiples, la méthode standard consiste à enregistrer la dernière heure cliquée et à éviter les clics des autres boutons en moins d'une seconde (ou à tout autre intervalle de temps).
// Make your activity class to implement View.OnClickListener
public class MenuPricipalScreen extends Activity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
// setup listeners.
findViewById(R.id.imageView2).setOnClickListener(MenuPricipalScreen.this);
findViewById(R.id.imageView3).setOnClickListener(MenuPricipalScreen.this);
...
}
.
.
.
// variable to track event time
private long mLastClickTime = 0;
// View.OnClickListener.onClick method defination
@Override
public void onClick(View v) {
// Preventing multiple clicks, using threshold of 1 second
if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) {
return;
}
mLastClickTime = SystemClock.elapsedRealtime();
// Handle button clicks
if (v == R.id.imageView2) {
// Do your stuff.
} else if (v == R.id.imageView3) {
// Do your stuff.
}
...
}
.
.
.
}
vous pouvez désactiver le multi-touch sur votre application en utilisant ces Android:splitMotionEvents="false"
et Android:windowEnableSplitTouch="false"
dans votre thème.
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
...
<item name="Android:splitMotionEvents">false</item>
<item name="Android:windowEnableSplitTouch">false</item>
</style>
Vous n’avez pas une séparation correcte des préoccupations (MVP ou toute autre saveur), vous insérez donc votre code dans votre activité/fragment.
Si vous ne pouvez pas gérer cela correctement, au moins n’utilisez pas de solutions non déterministes (comme une minuterie).
Utilisez les outils que vous avez déjà, disons que vous avez ce code:
//Somewhere in your onCreate()
Button myButton = findViewById…
myButton.setOnClickListener(this);
// Down below…
@Override
public void onClick(View view) {
if (myButton.isEnabled()) {
myButton.setEnabled(false);
// Now do something like…
startActivity(…);
}
}
Maintenant… dans un endroit complètement différent dans votre logique, comme… par exemple, votre onCreate ou votre onResume ou n'importe où où vous savez que vous voulez que votre bouton fonctionne à nouveau…
myButton.setEnabled(true);
enableMyButton();
ou disableMyButton()
selon. Parce qu’il est intégré à… .. Parce que le bouton respectera son état (et si vous avez une liste d’états correcte, il changera l’apparence pour vous et parce que ce sera toujours ce que vous attendez). En outre, il est plus facile de tester un présentateur plein de faux-semblants qu’une activité complète qui peut évoluer à jamais dans le code.
Une "meilleure" pratique consiste à utiliser onClickListener comme ceci ->
OnClickListener switchableListener = new OnClickListener(@Override
public void onClick(View arg0) {
arg0.setOnClickListener(null);
(or) use the view directly as a final variable in case of errors
ex :
textView.setOnClickListener(null);
// Some processing done here
Completed , enable the onclicklistener arg0.setOnClickListener(switchableListener);
});
Cela devrait résoudre le problème et c'est un moyen assez simple de gérer les choses
Vous pouvez essayer ma minuscule bibliothèque, elle fournit exactement ce que vous voulez en utilisant la même approche que la solution Shivanand . https://github.com/RexLKW/SClick