我有一个自定义导航抽屉,其中包含gridview中的按钮...我需要从适配器类关闭导航抽屉......或者是当我单击gridview中的按钮时关闭抽屉的任何其他方法。< / p>
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;
}
}
这是我的主要活动
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 :(得分:0)
您可以将侦听器传递给构造函数。 这个监听器有一个方法closeDrawer(),您可以在适配器的onClick()方法中调用它。
我猜你在活动中创建了这个适配器?在这种情况下,您的活动可以通过调用findViewById()来找到您的抽屉。
new ANavMenuGridViewAdapter(this, textViewResourceId, objects, new OnDrawerCloseListener() {
public void closeDrawer() {
((DrawerLayout) findViewById(R.id.drawer_layout)).closeDrawer(GravityCompat.START);
}
});