2017-08-25 9 views
-1

グリッド・ビューにボタンを含むカスタム・ナビゲーション・ドロワを持っています...アダプタ・クラスからナビゲーション・ドロワを閉じる必要があります。私は、gridviewのボタンをクリックします。アダプタ・クラスからナビゲーション・ドロワを閉じる方法

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

です...

は、これは私のアダプタクラスです...

にOnclickは完全に機能していますが、ナビゲーションドロワーが閉じていません

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

は、活動にコンテキストをキャストし、好きなことを閉じます – Killer

+0

申し訳ありませんが私はあなたを得る... ....私はアンドロイドへの初心者です...あなたが説明することができます –

答えて

0

です。 このリスナーには、アダプタのonClick()メソッドで呼び出すことのできるcloseDrawer()メソッドがあります。

あなたのアクティビティでこのアダプタを作成すると思いますか?この場合、アクティビティーはfindViewById()を呼び出してドロワーを見つけることができます。 ((HomeActivity)mContext).mBinding.drawerLayout.closeDrawers() ;:

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

保存された私の日:)ありがとう、あまりにも先生.... –

関連する問題