2016-04-18 1 views
0

J'ai une activité qui charge un fragment sur Créer. Et j'ai une barre d'outils sur cette activité qui a un bouton qui, lorsqu'on clique dessus, ajoute un nouveau fragment en plus de celui qui a été créé en premier.Le bouton Précédent de la barre d'outils ne ferme pas le fragment actuel.

Maintenant sur cette barre d'outils, lorsque je clique dessus, je veux supprimer le fragment le plus récent afin qu'il déplace juste le fragment qui est dans le bas (plus ancien). J'ai cherché et j'ai un peu compris, sauf pour une chose.

Je l'ai fait pour qu'il essaie de voir si le bouton de la barre d'outils est pressée:

@Override 
    public boolean onKeyUp(int keyCode, KeyEvent objEvent) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      onBackPressed(); 
      return true; 
     } 
     return super.onKeyUp(keyCode, objEvent); 
    } 


@Override 
    public void onBackPressed() { 
     FragmentManager mFM = getSupportFragmentManager(); 
     if(mFM.findFragmentByTag("NewFragment") != null){ 
      mFM.beginTransaction().remove(mFM.findFragmentByTag("NewFragment")).commit(); 
     } 
    } 

Le problème est, « codeTouche » ne correspond à à KEYCODE_BACK lorsque vous cliquez sur « le bouton retour de matériel » la et non le bouton de retour de la barre d'outils. Ce qu'il me donne est keycode 58 et non 4 (KEYCODE_BACK).

+0

pourquoi ne pas ajouter une déclaration '' or' avec keycode 58' .. quelque chose comme 'si (codeTouche = = KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.XY) ... ' – user0815

Répondre

0

Je crois que ce que vous cherchez est le NavigationListener pour le Toolbar Widget:

mToolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onBackPressed(); 
     } 
    }); 

mais si vous utilisez un thème avec un ActionBar et la fixation d'un supportActionBar puis faire quelque chose:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()){ 
     case android.R.id.home: 
      onBackPressed(); 
      break; 
    } 
    return true; 
} 
+0

cela a fonctionné. Merci! – gdubs

0

Votre question ne précise pas si vous posez une question de gestion de fragment (FragmentTransaction remove vs replace) ou une question de bouton de la barre d'outils. Je suppose que ce dernier ...

Une barre d'outils ou Android ActionBar devrait avoir des actions traitées en utilisant:

@Override 
public Boolean onOptionsItemSelected(MenuItem item) 
{ 
switch (item.getItemId()) 
{ 
    case MY_BACK_BUTTON: 
    myBackPressedHandler(); 
    return (true); 
} 
return (false); 
} 

cela suppose que votre bouton Back est ajouté en tant que MenuItem et a reçu une carte d'identité de MY_BACK_BUTTON.

Pour une barre d'outils, vous pouvez utiliser un MenuItemClickListener pour gérer les événements de clic:

mToolbar.setOnMenuItemClickListener(MenuItem menuItem) 
{ 
@Override 
public Boolean onMenuItemClick(MenuItem menuItem) 
{ 
    // call onOptionsItemSelected, or handle the click here directly 
    return (thisFragment.onOptionsItemSelected(menuItem)); 
} 
}); 

Si vous faites référence au bouton « Up » sur la barre d'outils/ActionBar, c.-à-setDisplayHomeAsUpEnabled (vrai), ce aura un getItemID() de android.R.id.home et peuvent être traitées de façon similaire:

case android.R.id.home: 
    myBackPressedHandler(); 
    return (true);