从Navigation Drawer启动Fragment导致应用崩溃,求排查方案
针对你遇到的「使用Android Studio预构建Navigation Drawer模板启动Fragment时,方法时而有效时而无效」的问题,我来分享下我的排查过程和最终解决办法:
首先,先看你用到的核心代码片段:
public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_home) { // Handle the camera action } else if (id == R.id.nav_gallery) { Facebook facebookFrag = new Facebook(); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().replace(R.id.homeLanding,facebookFrag,facebookFrag.getTag()).commit(); } else if (id == R.id.nav_slideshow) { } else if (id == R.id.nav_tools) { } else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { } DrawerLayout drawer = findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; }
从逻辑上看,这段代码没什么问题——点击Navigation Drawer中的Gallery选项时,Facebook Fragment应该替换掉id为homeLanding的默认Fragment,但出现时灵时不灵的情况,通常是Fragment与Activity之间的交互存在隐性冲突。
我之前碰到过完全一样的情况,最终是通过在MainActivity中实现OnFragmentInteractionListener接口解决了循环继承相关的问题,之后Fragment的切换就完全稳定了。
额外提醒下,实现接口后要在Fragment的onAttach方法中正确绑定Listener,避免空指针异常:
@Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof OnFragmentInteractionListener) { mListener = (OnFragmentInteractionListener) context; } else { throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener"); } }
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

