【发布时间】:2016-06-12 06:07:32
【问题描述】:
我在这里尝试创建一个菜单,在点击时从一个片段传递到另一个片段。当我按下菜单中的特定项目(活动)时,活动退出,故障是
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();// this line has the problem
这是我完整的 logcat:
FATAL EXCEPTION: main java.lang.NullPointerException在 android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:414) 在 android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:449) 在 android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:441) atbr.exemplozxingintegration.MainActivity.selectDrawerItem(MainActivity.java:84 atbr.exemplozxingintegration.MainActivity$1.onNavigationItemSelected(MainActivity.java:50) 在 android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:150) 在 android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811) 在 android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 在 android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958) 在 android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:308) 在 android.view.View.performClick(View.java:4439) 在 android.view.View$PerformClick.run(View.java:18395) 在 android.os.Handler.handleCallback(Handler.java:725) 在 android.os.Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:176) 在 android.app.ActivityThread.main(ActivityThread.java:5319) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 在 dalvik.system.NativeStart.main(Native Method)
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
txResult = (TextView) findViewById(R.id.txResult);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
nvDrawer = (NavigationView) findViewById (R.id.nvView);
setupDrawerContent(nvDrawer);}
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
selectDrawerItem(menuItem);
return true;
}
});
}
public void selectDrawerItem(MenuItem menuItem) {
// Create a new fragment and specify the planet to show based on
// position
Fragment fragment = null;
Class fragmentClass;
switch(menuItem.getItemId()) {
case R.id.nav_first_fragment:
fragmentClass = MainActivity.class;
break;
case R.id.nav_second_fragment:
fragmentClass = SecondActivity.class;
break;
case R.id.nav_third_fragment:
fragmentClass = ThirdActivity.class;
break;
default:
fragmentClass = MainActivity.class;
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
// Insert the fragment by replacing any existing fragment
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
// Highlight the selected item, update the title, and close the drawer
menuItem.setChecked(true);
setTitle(menuItem.getTitle());
mDrawer.closeDrawers();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// The action bar home/up action should open or close the drawer.
switch (item.getItemId()) {
case android.R.id.home:
mDrawer.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
// @Override
// protected void onPostCreate(Bundle savedInstanceState) {
// super.onPostCreate(savedInstanceState);
//
SecondActivity.java
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
selectDrawerItem(menuItem);
return true;
}
});
}
public void selectDrawerItem(MenuItem menuItem) {
// Create a new fragment and specify the planet to show based on
// position
Fragment fragment = null;
Class fragmentClass;
switch(menuItem.getItemId()) {
case R.id.nav_first_fragment:
fragmentClass = MainActivity.class;
break;
case R.id.nav_second_fragment:
fragmentClass = SecondActivity.class;
break;
case R.id.nav_third_fragment:
fragmentClass = ThirdActivity.class;
break;
default:
fragmentClass = SecondActivity.class;
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
// Insert the fragment by replacing any existing fragment
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
// Highlight the selected item, update the title, and close the drawer
menuItem.setChecked(true);
setTitle(menuItem.getTitle());
mDrawer.closeDrawers();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// The action bar home/up action should open or close the drawer.
switch (item.getItemId()) {
case android.R.id.home:
mDrawer.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
// @Override
// protected void onPostCreate(Bundle savedInstanceState) {
// super.onPostCreate(savedInstanceState);
// }
【问题讨论】:
-
您在 logcat 中是否有任何错误?请张贴。
-
这是 logcat 错误:FATAL EXCEPTION: main java.lang.NullPointerException
-
请在您的问题中发布完整的日志猫。
-
添加了完整的 logcat @Rohit5k2
-
第 84 行是哪一行?错误在 MainActivity.java:84
标签: java android android-layout android-fragments android-studio