0

[UPDATE]Poignée bouton Accueil événement clic en utilisant DrawerLayout

J'ai changé le activity_main.xml et le MainActivity.class comme suit: Creating a Navigation Drawer, du Guide des développeurs Android et maintenant il fonctionne parfaitement.


J'utilise un DrawerLayout pour mon MainActivity, qui contient un FrameLayout juste pour définir différents Fragments mais je ne suis pas capable de gérer ses clics. Cela fonctionne, le menu est ouvert et fermé mais je ne sais pas comment ni où les gérer. Ceci est mon code:

toolbar.xml

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?attr/actionBarSize"/> 

activity_main.xml

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:openDrawer="start"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/ll_main_layout" 
     android:orientation="vertical"> 

     <include layout="@layout/toolbar" 
      android:id="@+id/toolbar"/> 

     <FrameLayout 
      android:id="@+id/main_frameLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
    </LinearLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <include layout="@layout/lateral_menu_header" /> 

      <ListView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:id="@+id/lateral_menu_listView" 
       android:layout_marginTop="16dp" 
       android:divider="@android:color/transparent" 
       android:dividerHeight="0dp"/> 
     </LinearLayout> 
    </android.support.design.widget.NavigationView> 
</android.support.v4.widget.DrawerLayout> 

MainActivity.class

public class MainActivity extends AppCompatActivity 
     implements ListView.OnItemClickListener { 

    private static final String LOG_TAG = MainActivity.class.getSimpleName(); 
    private static final String CURRENT_FRAGMENT = "mCurrentFragment"; 

    private DrawerLayout mDrawerLayout; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private ListView mDrawerList; 
    private ArrayList<LateralMenuItem> lateralMenuItems; 

    private Toolbar mToolbar; 
    public ActionBar mActionBar; 

    private FragmentManager mFragmentManager; 


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

     initToolbar(); 
     initLateralMenu(); 

     mFragmentManager = getSupportFragmentManager(); 
    } 

    private void initLateralMenu() { 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (mDrawerLayout != null) { 
      mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, 0, 0); 
      mDrawerToggle.syncState(); 

      mDrawerLayout.addDrawerListener(mDrawerToggle); 

      mDrawerList = (ListView) findViewById(R.id.lateral_menu_listView); 
      if (mDrawerList != null) { 
       lateralMenuItems = initLateralMenuList(); 

       LateralMenuListAdapter lateralMenuListAdapter = new LateralMenuListAdapter(MainActivity.this, lateralMenuItems); 
       mDrawerList.setAdapter(lateralMenuListAdapter); 

       mDrawerList.setOnItemClickListener(this); 
      } 
     } 
    } 

    private void initToolbar() { 
     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 

     mActionBar = getSupportActionBar(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if(mDrawerToggle.onOptionsItemSelected(item)) { 
      // THIS DOESN'T WORK, I'VE DEBUGGED AND IS UNREACHABLE 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

La chose est que onOptionesItemSelected(MenuItem item) ne fonctionne pas. J'ai également essayé de définir un mDrawerToggle.setToolbarNavigationClickListener(...), mToolbar.setOnMenuItemClickListener(...) et mToolbar.setNavigationOnClickListener() et aucun d'eux n'a fonctionné.

Mon objectif est de gérer quand je suis dans l'un ou l'autre Fragment pour régler le bouton d'accueil et peut remplacer onBackPressed().

Peut-être que la logique est différente lorsque vous utilisez le DrawerLayout, ai-je raté quelque chose?

Répondre

0
@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 

    switch (item.getItemId()) { 

     case R.id.nav_logout: 
      logoutDialog(); 
      break; 
    } 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

Essayez cette

+0

Cela ne fonctionne pas non plus. J'ai débogué au point de commutation et il ne s'arrête même pas là. –

0

Vous utilisez NavigationView avec vue sur la liste personnalisée et que vous avez donné setOnItemClickListener à la vue de la liste ne NavigationView, donc l'appel viendra à

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

    } 

mais je ne suis pas sûr où est ce morceau de code dans votre classe.

Pour votre cas, le rappel viendra à onItemClick et non à NavigationItemSelected.

Si vous avez des questions, s'il vous plaît faites le moi savoir.

+0

Vous avez raison, les éléments de la liste sont appelés à partir de 'onItemClick', mais je veux gérer le bouton Home de' ActionBar', ce qui est complètement différent. –