2017-01-09 4 views
0

Je veux effectuer une opération comme quand j'ai appuyé sur le bouton Single Time puis il passera à l'écran sélectionné et quand j'ai appuyé deux fois sur le bouton Back, il affichera la boîte de dialogue et demandera la sortie.Comment revenir à l'écran précédent en appuyant une fois sur le bouton précédent et comment quitter l'application pendant que le bouton arrière est enfoncé deux fois?

J'ai essayé beaucoup d'exemples dans un débordement de pile, mais aucun d'eux ne me aident ..

navaigation.java

private int clickCount = 0; 
    private long delay = 100; 
    Timer timer = new Timer(); 

    @Override 
    public void onBackPressed() { 
     if (clickCount == 2) { 
      super.onBackPressed(); 
      timer.cancel(); 
     } else{ 
      clickCount++; 
      timer.schedule(new TimerTask() { 
       @Override 
       public void run() { 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          backButtonHandler(); 
         } 
        }); 
       } 

     }, delay); 
    } 

} 




public void backButtonHandler() { 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(
      Navigation.this); 
    // Setting Dialog Title 
    alertDialog.setTitle("Leave application?"); 
    // Setting Dialog Message 
    alertDialog.setMessage("Are you sure you want to leave the application?"); 
    // Setting Icon to Dialog 
    alertDialog.setIcon(R.drawable.m_visit); 
    // Setting Positive "Yes" Button 
    alertDialog.setPositiveButton("YES", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        finish(); 
       } 
      }); 
    // Setting Negative "NO" Button 
    alertDialog.setNegativeButton("NO", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        // Write your code here to invoke NO event 
        dialog.cancel(); 
       } 
      }); 
    // Showing Alert Message 
    alertDialog.show(); 
} 

J'ai essayé de cette façon, mais il ne fonctionne pas correctement ...

+0

vérifier ma mise à jour répondre. – W4R10CK

+0

il ya tellement de réponses que vous n'êtes toujours pas en mesure de résoudre vos problèmes et toutes les réponses sont correctes. –

Répondre

0

Essayez ce code:

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
private static final int TIME_DELAY = 2000; 
private static long back_pressed; 

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

@Override 
public void onBackPressed() { 
    if (back_pressed + TIME_DELAY > System.currentTimeMillis()) { 
     super.onBackPressed(); 
    } 
    else { 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 
     alertDialogBuilder.setMessage("Are you sure, You wanted to exit"); 
     alertDialogBuilder.setPositiveButton("yes", 
     new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface arg0, int arg1) { 
      finish(); 
     } 
     }); 

     alertDialogBuilder.setNegativeButton("No",new 
     DialogInterface.OnClickListener() { 
     Override 
     public void onClick(DialogInterface dialog, int which) { 
     dismiss(); 
     } 
     }); 

     AlertDialog alertDialog = alertDialogBuilder.create(); 
     alertDialog.show(); 
     }  
    } 
    back_pressed = System.currentTimeMillis(); 
} 
+0

je veux utiliser la boîte de dialogue pour la sortie, il me demandera de quitter quand j'applique votre code puis il affichera le dailog en un seul clic et quand je clique deux fois il sera directement quitté de l'application –

+0

ok, je vais éditer ma réponse . attendez – W4R10CK

+0

@Sachin cocher la réponse. – W4R10CK

0

Hey vérifier ce code J'ai montré Snackbar si l'utilisateur clique sur le bouton de retour pour la première fois. Et pour la deuxième fois Application obtiendra la sortie.

private boolean mIsBackAlreadyPressed; 

    @Override 
public void onBackPressed() { 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else if (mIsBackAlreadyPressed) { 
      mIsBackAlreadyPressed = false; 
      super.onBackPressed(); 
      overridePendingTransition(R.anim.pull_in_left, R.anim.push_out_right); 
     } else { 
      mIsBackAlreadyPressed = true; 
      Snackbar.make(drawer, R.string.press_back_twice, Snackbar.LENGTH_SHORT).show(); 

      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        mIsBackAlreadyPressed = false; 
       } 
      }, 2000); 
     } 
    } 

Espérons que cette aide.Happy codage.

+0

si l'utilisateur pressé seul temps, il passera à l'écran suivant? comment puis-je appliquer ce/ –

+0

@Sachin pouvez-vous dire s'il vous plaît ce que vous voulez exactement.A et B activité sont là est l'utilisateur est sur l'activité B et cliquez sur le bouton retour ira à une activité si l'utilisateur clique sur le bouton retour de l'activité B 2 fois l'application va sortir. C'est ce que vous voulez? –

+0

oui exactement ... et lorsque l'utilisateur cliquez sur le bouton de retour deux fois, il affichera le dialogue et me demander de quitter –

0

Pouvez-vous essayer

private boolean exit=false;//declare in public 

public void onBackPressed() { 
    // TODO Auto-generated method stub 
    if (exit) { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     startActivity(intent); 
     finish(); 
    } else { 
     Toast.makeText(this, "Tap again to exit.", Toast.LENGTH_SHORT) 
       .show(); 
     exit = true; 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       exit = false; 
      } 
     }, 3 * 1000); 
    } 
} 
+0

qu'est-ce que la sortie dans ce? –

+0

private Boolean exit = false; – HsRaja

0

essayez ceci:

private Boolean close_app = false; 
@Override 
    public void onBackPressed() { 
     if (close_app) { 
      //finish(); // pressed twice 
      backButtonHandler(); 
     } else { 
      Toast.makeText(this, "Press Back again to Exit.", 
        Toast.LENGTH_SHORT).show(); 
      close_app = true; 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        close_app = false; 
       } 
      }, 3 * 1000); 
     } 
    } 

Le Handler poignées ici en arrière presses, il montre simplement un Toast et s'il y a un autre appui arrière dans les 3 secondes, il montre le dialogue pour sortir de l'application sur

0

si vous appuyez sur retour alors u peut aller où que tu veux

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent intent = new Intent(Exit.this,Home.class); 
    startActivity(intent); 
    finish(); 
} 

Si u cliquez deux fois sur le bouton Retour maintenant u peut sortir essayer ci-dessous le code

private Boolean exit = false; 
@Override 
public void onBackPressed() { 
    if (exit) { 
     finish(); // finish activity 
    } else { 
     Toast.makeText(this, "Press Back again to Exit.", 
       Toast.LENGTH_SHORT).show(); 
     exit = true; 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       exit = false; 
      } 
     }, 3 * 1000); 

    } 

} 
+0

dois-je coller ce code dans chaque activité de fragment? pour la presse retour unique? –

+0

vous devez transmettre cela sur ce que vous appelez tous les fragments (écran d'activité) vous pouvez coller ce code –