我有 MainActivity,它包含 2 个 fragment 。第一个 fragment 有抽屉导航,第二个 fragment 没有。在 MainActivity 中,我想重写 onBackPressed() 方法,因此当抽屉导航打开时,它必须关闭 fragment 。但我不知道如何从 Activity 获取 fragment 的抽屉导航状态。代码如下:
MainActivity.java
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)){
drawerLayout.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
FragmentListProduct.java
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.fragment_list_product_layout, container, false);
Toolbar toolbar = (Toolbar) mainView.findViewById(R.id.toolbar);
fragmentActivity.setSupportActionBar(toolbar);
drawerLayout = (DrawerLayout) mainView.findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(fragmentActivity, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawerLayout.addDrawerListener(drawerToggle);
drawerToggle.syncState();
navigationView = (NavigationView) mainView.findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
navigationView.setCheckedItem(R.id.nav_cat_all);
}
当然,它给了我错误无法解析符号darwerlayout
。
在我将drawerLayout
作为静态字段之前,但我收到警告不要将Android上下文类放在静态字段中;这是内存泄漏(也会破坏即时运行)
。那么如何解决这个问题,或者也许你有另一个解决方案:D
最佳答案
您可以使用标签访问 fragment ,调用 fragment 时必须分配该标签,如下所示:
getFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, fragment, "the_tag_here")
.commit();
使用 getFragmentManager().findFragmentByTag("the_tag") 访问它
@Override
public void onBackPressed() {
FragmentListProduct fragment = (FragmentListProduct) getFragmentManager().findFragmentByTag("the_tag_here");
if (fragment != null) {
DrawerLayout drawerLayout = fragment.drawerLayout;
//make drawerLayout public in the fragment
if (drawerLayout.isDrawerOpen(GravityCompat.START)){
drawerLayout.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
} else {
super.onBackPressed();
}
}
关于android - 从 Activity 获取 Fragment 的抽屉导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40967620/