gpt4 book ai didi

java - 尝试从 fragment 中的 fragment 调用方法并出现 NPE

转载 作者:行者123 更新时间:2023-12-01 08:50:58 25 4
gpt4 key购买 nike

我无法解决这个问题。我认为 FragmentTransaction 的工作方式就像“我创建 fragment ,然后打开它”,但这会出错。我的问题是,当我从 FragmentB 调用方法时,我得到了 NPE,就像我的值未初始化一样。那么现在发生了什么。

当我尝试使用抽屉中单击的项目的位置调用方法configureSettingsMenus 时,出现问题。

     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;
}
});

这是 fragment 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;
}
}

我在 Butterknife 中初始化了所有内容。就像你看到的,你有设置文本,我试图为每个选定的位置设置文本。

我在fragmentB中的settingsText.setText上得到了NPE

以及fragmentA中的settingsFragment.configureSettingsMenus(position)

怎么了?任何帮助表示赞赏。

编辑:

Process: com.example.andrzej.forexapp, PID: 2329
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.andrzej.forexapp.activities.fragments.SettingsFragment.configureSettingsMenus(SettingsFragment.java:75)
at com.example.andrzej.forexapp.activities.fragments.MainGameFragment$2.onItemClick(MainGameFragment.java:156)
at com.mikepenz.materialdrawer.DrawerBuilder$5.onClick(DrawerBuilder.java:1716)
at com.mikepenz.materialdrawer.DrawerBuilder$5.onClick(DrawerBuilder.java:1690)
at com.mikepenz.fastadapter.FastAdapter$1.onClick(FastAdapter.java:492)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

最佳答案

在 fragment 之间直接通信并不是一个好的做法。您必须在 fragment 中编写一个接口(interface),并让附加的 Activity 来实现该接口(interface)。

在您的 fragment 中:

public interface DrawerClickCallbacks{
public void onItemClick(int position);
}

在您的 Activity 中:

public void onItemClick(int position) {
settingsFragment.configureSettingsMenus(position);
}

您必须在附加到 fragment 的 Activity 中实现 DrawerClickCallbacks

关于java - 尝试从 fragment 中的 fragment 调用方法并出现 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42411938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com