【问题标题】:Android Fragments NullPointerException errorAndroid Fragments NullPointerException 错误
【发布时间】:2013-12-09 22:17:49
【问题描述】:

我正在尝试使用以下代码打开一个位于另一个 Fragment 内的 Fragment,但它给了我一个空指针异常而没有任何原因。

Fragment newFragment = new SecondFragment(); 
// consider using Java coding conventions (upper char class names!!!)
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.menuitem_detail_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit(); 

这段代码位于 Fragment (android.support.v4.app.Fragment) 内的 onCreateView 方法内的基本 onItemClickListener

关于我可能做错了什么有什么想法吗?

【问题讨论】:

  • 抛出的 NPE 是哪一行?

标签: java android android-fragments nullpointerexception android-nested-fragment


【解决方案1】:

在 getFragmentManager 上,您应该使用 getActivity().getSupportFragmentManager()getChildFragmentManager() 而不是 getFragmentManager。如果 NPE 在 transaction.replace() 中被抛出,你应该确保你正在替换一个适当的布局,例如

RelativeLayout rl = (RelativeLayout) getActivity().findViewById(R.id.menuitem_detail_container);
transaction.replace(rl.getId(), newFragment);

以上只是一个例子,因为我不知道你的代码,但你可能会明白这个想法。在此示例中,我假设您使用的容器布局在活动 XML 中具有相同的名称。

请确保您不要尝试替换返回 null 的内容。 如果您正在使用 onCreate 中的容器,请尝试记录它以查看它是否为空。

如果这对您没有帮助,请发布您的 Logcat 输出。

【讨论】:

    【解决方案2】:

    寻找我的transaction.replace:

    transaction.replace(R.id.provas_view, new ListaProvasFragment(), ListaProvasFragment.class.getCanonicalName());

    【讨论】:

      【解决方案3】:

      当您使用嵌套片段时,您需要getChildFragmentManager() 用于内部片段。

      还要确保从 FragmentManager 和 ChildFragmentManager 的支持库导入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-23
        • 2014-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多