2017-08-25 4 views
-1

J'ai un tiroir de navigation personnalisé qui contient des boutons dans gridview ... Je dois fermer le tiroir de navigation de la classe d'adaptateur ... OU est toute autre façon de fermer le tiroir quand Je clique sur un bouton dans le gridview.Comment fermer le tiroir de navigation d'une classe d'adaptateur

Onclick fonctionne parfaitement, mais le tiroir de navigation ne se ferme pas ...

C'est ma classe adaptateur ...

public class NavMenuGridViewAdapter extends ArrayAdapter<MenuGridItem>{ 

     ArrayList<MenuGridItem> menuList = new ArrayList<>(); 
     Context context; 
     View activityHome; 

     public NavMenuGridViewAdapter(Context context, int textViewResourceId, ArrayList<MenuGridItem> objects) { 
      super(context, textViewResourceId, objects); 
      menuList = objects; 
      this.context=context; 
     } 

     @Override 
     public int getCount() { 
      return super.getCount(); 
     } 

     @Override 
     public View getView(int position, final View convertView, ViewGroup parent) { 

      View v = convertView; 
      LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.nav_menu_view_item, null); 
      activityHome = inflater.inflate(R.layout.activity_home, null); 
      AppCompatButton appCompatButton = (AppCompatButton) v.findViewById(R.id.nav_menu_button); 
      appCompatButton.setBackgroundResource(menuList.get(position).getMenuImage()); 
      appCompatButton.setPadding(0,230,0,0); 
      appCompatButton.setText(menuList.get(position).getMenuName()); 
      appCompatButton.setTag(Integer.valueOf(position)); 
      appCompatButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Integer position = (Integer)v.getTag(); 
        Fragment fragment=null; 
        FragmentTransaction ft=null; 
        Intent intent; 
        switch (position){ 
         case 0: 
          fragment = new DashboardFragment(); 
          ft = ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction(); 
          ft.replace(R.id.content_frame, fragment); 
          ft.commit(); 
          break; 
         case 1: 
          fragment = new MyGiftCardFragment(); 
          ft = ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction(); 
          ft.replace(R.id.content_frame, fragment); 
          ft.commit(); 

          break; 
         case 2: 
          break; 
         case 3: 
          break; 
         case 4: 
          break; 
         case 5: 
          break; 
        } 
        DrawerLayout drawer = activityHome.findViewById(R.id.drawer_layout); 
        Log.i("GiftCard", "Menu: " + drawer); 
        //drawer.closeDrawer(Gravity.LEFT); 
        drawer.closeDrawer(GravityCompat.START); 
       }}); 
      return v; 

     } 

    } 

Ceci est mon MainActivity

NavMenuGridViewAdapter navMenuGridViewAdapter=new NavMenuGridViewAdapter(this,R.layout.nav_menu_view_item,menuList); 
     navbarMenuGridView.setAdapter(navMenuGridViewAdapter); 

Ceci est mon nav_menu_view_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical"> 

     <android.support.v7.widget.AppCompatButton 
      android:id="@+id/nav_menu_button" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:adjustViewBounds="true" 
      android:textColor="#FFFF" 
      android:scaleType="fitCenter" 
      /> 
    </RelativeLayout> 
</LinearLayout> 
+0

jeté le contexte à l'activité et le fermer comme: ((HomeActivity) mContext) .mBinding.drawerLayout.closeDrawers(); – Killer

+0

désolé je n'ai pas eu vous .... je suis débutant à android ... pouvez-vous expliquer –

Répondre

0

Vous pouvez passer un auditeur au constructeur. Cet écouteur a une méthode closeDrawer() que vous pouvez appeler dans votre méthode onClick() dans votre adaptateur.

Je suppose que vous créez cet adaptateur dans votre activité? Dans ce cas, votre activité peut trouver votre tiroir en appelant findViewById().

 new ANavMenuGridViewAdapter(this, textViewResourceId, objects, new OnDrawerCloseListener() { 
     public void closeDrawer() { 
      ((DrawerLayout) findViewById(R.id.drawer_layout)).closeDrawer(GravityCompat.START); 
     } 
    }); 
+0

sauvé ma journée :) Merci beaucoup monsieur .... –