如何关闭适配器类中的导航抽屉
问题描述:
我有一个自定义导航抽屉,其中包含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>
答
你可以监听器传递给构造函数。 这个监听器有一个方法closeDrawer(),你可以在你的适配器的onClick()方法中调用它。
我想你在你的活动中创建这个适配器?在这种情况下,您的活动可以通过调用findViewById()来查找抽屉。
new ANavMenuGridViewAdapter(this, textViewResourceId, objects, new OnDrawerCloseListener() {
public void closeDrawer() {
((DrawerLayout) findViewById(R.id.drawer_layout)).closeDrawer(GravityCompat.START);
}
});
+0
保存我的一天:)谢谢你这么多先生.... –
投上下文活动并关闭它喜欢: ((HomeActivity)mContext).mBinding.drawerLayout.closeDrawers(); – Killer
对不起,我没有得到你....我是新手到Android ...你可以解释 –