2017-04-22 5 views
0

J'ai une acivity avec appbar et un dialogue fullsecreen avec appbar (cette boîte de dialogue est appelée à partir de l'activité). J'ai mis une certaine action quand le bouton d'accueil de l'activité est pressé, et quand le bouton d'accueil et le dialogue sont enfoncés il devrait fermer la boîte de dialogue. J'ai remarqué que les deux boutons ont le même id (android.R.id.home). et aparently il y a un conflit quand la méthode "onOptionsItemSelected" est appelée parce que quand j'appuie sur le bouton d'accueil de la boîte de dialogue cela ne fonctionne pas, mais si un enlève la partie du code sur l'activité (si id == android.R .id.home) cela fonctionne bien et la boîte de dialogue rejeter. Que dois-je faire? est-il possible d'empêcher ce conflit, peut-être définir un identifiant différent pour le bouton d'accueil?Conflit entre le bouton d'accueil de l'activité et l'ID du bouton d'accueil Dialogfragment

c'est la méthode de l'activité

public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_logout) { 
      exitApp(); 
      return true; 
     } 

     else if ((id == android.R.id.home) && searchActivated) { 
      drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
      toggle.syncState(); 
      searchActivated=false; 
      reload_fragment_data(); 
      return true; 
     } 
     else if ((id == android.R.id.home) && (!searchActivated)) 
     { 
      drawer.openDrawer(GravityCompat.START); // OPEN DRAWER 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 

    } 

c'est la méthode de la dialogfragment

public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.action_next) { 
      pager.setCurrentItem(pager.getCurrentItem() + 1); 
      updateTitle(); 
      return true; 
     } else if (id==R.id.action_previous) 
     { 

      pager.setCurrentItem(pager.getCurrentItem() - 1); 
      updateTitle(); 
      return true; 
     } 

     else if (id == android.R.id.home) { 

      dismiss(); 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

Répondre

0

Vous pouvez appliquer et essayer cette solution dans l'activité.

public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment_container); 
    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_logout) { 
     exitApp(); 
     return true; 
    } 

    else if ((id == android.R.id.home) && searchActivated && !(fragment instanceof DialogFragmentClassName)) { 
     drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
     toggle.syncState(); 
     searchActivated=false; 
     reload_fragment_data(); 
     return true; 
    } 
    else if ((id == android.R.id.home) && (!searchActivated)) 
    { 
     drawer.openDrawer(GravityCompat.START); // OPEN DRAWER 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 

}