如何关闭适配器类中的导航抽屉

问题描述:

我有一个自定义导航抽屉,其中包含gridview中的按钮...我需要关闭适配器类中的导航抽屉...或者是任何其他关闭抽屉时的方式我点击了gridview中的一个按钮。如何关闭适配器类中的导航抽屉

的onclick工作完美,但抽屉式导航栏不打烊......

这是我的适配器类...

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; 

     } 

    } 

这是我mainActivity

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

这是我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

投上下文活动并关闭它喜欢: ((HomeActivity)mContext).mBinding.drawerLayout.closeDrawers(); – Killer

+0

对不起,我没有得到你....我是新手到Android ...你可以解释 –

你可以监听器传递给构造函数。 这个监听器有一个方法closeDrawer(),你可以在你的适配器的onClick()方法中调用它。

我想你在你的活动中创建这个适配器?在这种情况下,您的活动可以通过调用findViewById()来查找抽屉。

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

保存我的一天:)谢谢你这么多先生.... –