Java 尝试在fragmentA中调用方法rom fragmentB并使用NPE
我解决不了这个问题。我认为FragmentTransaction的工作原理类似于“我创建片段,我打开它”,但这是错误的。我的问题是,当我从FragmentB调用方法时,我得到了NPE,就像我的值没有初始化一样。那现在怎么办 问题是,当我尝试调用方法configureSettingsMinus时,其位置位于抽屉中单击的项上Java 尝试在fragmentA中调用方法rom fragmentB并使用NPE,java,android,nullpointerexception,Java,Android,Nullpointerexception,我解决不了这个问题。我认为FragmentTransaction的工作原理类似于“我创建片段,我打开它”,但这是错误的。我的问题是,当我从FragmentB调用方法时,我得到了NPE,就像我的值没有初始化一样。那现在怎么办 问题是,当我尝试调用方法configureSettingsMinus时,其位置位于抽屉中单击的项上 result.setOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
result.setOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
FragmentTransaction ft = getChildFragmentManager().beginTransaction();
ft.addToBackStack(null);
// settingsFragment.configureSettingsMenus(position);
result.closeDrawer();
// ft.add(settingsFragment, "settingsFragment");
if (settingsFragment != null && settingsFragment instanceof SettingsFragment) {
settingsFragment.configureSettingsMenus(position);
settingsFragment.show(ft, DIALOG_SETTINGS);
}
return true;
}
});
这是片段B中的方法
public void configureSettingsMenus(int position) {
switch (position) {
case TRADING_HISTORY:
settingsText.setText("fragment 0");
break;
case LEADER_BOARD:
settingsText.setText("fragment 1");
break;
case SPECIAL_OFFER:
settingsText.setText("fragment 2");
break;
case VIDEO_TUTORIALS:
settingsText.setText("fragment 3");
break;
case FAQ:
settingsText.setText("fragment 4");
break;
case CONTACT:
settingsText.setText("fragment 5");
break;
default:
break;
}
}
我把所有的东西都放在奶油刀里。就像你看到你有设定值一样,我试着为每个选择的位置设定设定值
我在settingsText.setText的片段b中得到了NPE
并在片段A中的设置片段。配置设置菜单(位置)
怎么了?任何帮助都是适当的
编辑:
在片段之间直接通信不是一种好的做法。您必须在片段中编写一个接口,并让附加的活动实现该接口
在你的片段中:
public interface DrawerClickCallbacks{
public void onItemClick(int position);
}
在您的活动中:
public void onItemClick(int position) {
settingsFragment.configureSettingsMenus(position);
}
您必须在附加到片段的活动中实现DrawerClickCallbacks,发布日志。您的设置文本
为空。你应该再检查一下。
public void onItemClick(int position) {
settingsFragment.configureSettingsMenus(position);
}