Java 片段替换返回NullPointerException

Java 片段替换返回NullPointerException,java,android,android-fragments,android-viewpager,android-nested-fragment,Java,Android,Android Fragments,Android Viewpager,Android Nested Fragment,关于这个问题有很多话题,但我找不到任何有助于我的案例的解决方案 背后的想法: public void displayAlertSuccess(Context ctx) { new AlertDialog.Builder(ctx) .setTitle("ACCESS GRANTED!") .setMessage("Congratulations!") .setPositiveButton

关于这个问题有很多话题,但我找不到任何有助于我的案例的解决方案

背后的想法:

public void displayAlertSuccess(Context ctx) {
        new AlertDialog.Builder(ctx)
                .setTitle("ACCESS GRANTED!")
                .setMessage("Congratulations!")
                .setPositiveButton("Great!", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // continue with
                            replaceFragment();
                    }

                })
                .setNegativeButton("Format my Card", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        mainActivity.setNFC_ACTION("FORMAT");

                    }
                })
                .setIcon(android.R.drawable.ic_dialog_info)
                .show();
    }

    private void replaceFragment() {


        Fragment frag = new CardDesfire1();
        getFragmentManager().beginTransaction().replace(R.id.content_frame, frag).commit();


    }
getFragmentManager().beginTransaction().replace(R.id.content_frame, frag).commit();
我有一个ViewPager,可以在3个片段之间切换。这很有效。但是在上面提到的一个片段中,我做了一些功能——然后我签入前面提到的另一个片段。一切正常。 然后,当我进行检查时,我打开一个AlertDialog,告诉用户他的配置成功。通过单击按钮,我希望该应用程序将用户传输到一个不同的片段(而不是一个ViewPager片段)

代码片段-片段二:

public void displayAlertSuccess(Context ctx) {
        new AlertDialog.Builder(ctx)
                .setTitle("ACCESS GRANTED!")
                .setMessage("Congratulations!")
                .setPositiveButton("Great!", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // continue with
                            replaceFragment();
                    }

                })
                .setNegativeButton("Format my Card", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        mainActivity.setNFC_ACTION("FORMAT");

                    }
                })
                .setIcon(android.R.drawable.ic_dialog_info)
                .show();
    }

    private void replaceFragment() {


        Fragment frag = new CardDesfire1();
        getFragmentManager().beginTransaction().replace(R.id.content_frame, frag).commit();


    }
getFragmentManager().beginTransaction().replace(R.id.content_frame, frag).commit();
代码片段-XML布局:

public void displayAlertSuccess(Context ctx) {
        new AlertDialog.Builder(ctx)
                .setTitle("ACCESS GRANTED!")
                .setMessage("Congratulations!")
                .setPositiveButton("Great!", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // continue with
                            replaceFragment();
                    }

                })
                .setNegativeButton("Format my Card", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        mainActivity.setNFC_ACTION("FORMAT");

                    }
                })
                .setIcon(android.R.drawable.ic_dialog_info)
                .show();
    }

    private void replaceFragment() {


        Fragment frag = new CardDesfire1();
        getFragmentManager().beginTransaction().replace(R.id.content_frame, frag).commit();


    }
getFragmentManager().beginTransaction().replace(R.id.content_frame, frag).commit();
I.activity_holder.xml

来自LogCat的错误描述:

public void displayAlertSuccess(Context ctx) {
        new AlertDialog.Builder(ctx)
                .setTitle("ACCESS GRANTED!")
                .setMessage("Congratulations!")
                .setPositiveButton("Great!", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // continue with
                            replaceFragment();
                    }

                })
                .setNegativeButton("Format my Card", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        mainActivity.setNFC_ACTION("FORMAT");

                    }
                })
                .setIcon(android.R.drawable.ic_dialog_info)
                .show();
    }

    private void replaceFragment() {


        Fragment frag = new CardDesfire1();
        getFragmentManager().beginTransaction().replace(R.id.content_frame, frag).commit();


    }
getFragmentManager().beginTransaction().replace(R.id.content_frame, frag).commit();
java.lang.NullPointerException

错误发生在:

public void displayAlertSuccess(Context ctx) {
        new AlertDialog.Builder(ctx)
                .setTitle("ACCESS GRANTED!")
                .setMessage("Congratulations!")
                .setPositiveButton("Great!", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // continue with
                            replaceFragment();
                    }

                })
                .setNegativeButton("Format my Card", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        mainActivity.setNFC_ACTION("FORMAT");

                    }
                })
                .setIcon(android.R.drawable.ic_dialog_info)
                .show();
    }

    private void replaceFragment() {


        Fragment frag = new CardDesfire1();
        getFragmentManager().beginTransaction().replace(R.id.content_frame, frag).commit();


    }
getFragmentManager().beginTransaction().replace(R.id.content_frame, frag).commit();
我的错误发生在用户单击AlertDialog中的按钮“Great”时,该按钮应调用片段替换

我试过:

我试图用
getChildFragment
修复它,但随后我得到了不同类型的错误:
IllegalStateException:活动已被销毁


任何帮助都将不胜感激

您是否已在您的CardDesfire1片段中声明了默认构造函数。如果没有,那么就申报

public CardDesfire1(){}
使您的家长活动扩展到零碎活动

class ParentActivity extends FragmentActivity

出现此问题是因为在片段中调用getFragmentManager(),应该将对话框的显示委托给活动

使活动实现一个接口,并在显示对话框时让片段调用此接口方法

示例:您在FragmentTwo中定义了一个新的内部接口(此代码位于FragmentTwo中):

将您的活动链接到片段(此代码分为片段2):

然后使活动实现OnReplaceFragmentListener。 和(此代码进入FragmentTwo的托管活动):


R.id.content\u frame是否正确?您是否检查了它?请添加所有相关信息,例如
R.id.content\u frame
(显示布局XML),异常的完整堆栈跟踪。根据我收集的信息:尝试
getActivity.getFragmentManager()
@Kesh1234是的,这是正确的。由于我的错误,忘记发布XML的。在它上面,将更新。getActivity没有帮助。你是否尝试过分解失败的复合语句以准确识别空值?@sudocode没有,我还没有,我对调试不是很在行,这就是我首先在这里发布的原因。但是,如果没有其他事情,我将不得不一步一步地调试。你能不能在我的例子中发布一个简短的例子,说明如何实现这样的接口?添加了相关的示例测试。将很快发布结果。仍然错误:NullPointerException:mCallback.onReplaceFragment();内部AccessSlideTo片段。回调应该在片段中,对吗?不在活动中?我把它放在Fragment类中。嘿,Vikalp,我已经尝试添加构造函数,但它仍然在同一行代码中出现相同的错误(空指针)。现在,我认为您应该调试代码并检查什么是空的。我想说的是,检查哪个方法(getFragmentManager()或beginTransaction()或replace(R.id.content\u frame,frag)或commit())返回null。感谢您的响应。我同时检查了它,我已经在getFragmentManager()上找到了null。但是,我已经尝试过getActivity.getSupportFragmentManager()和getChildFragmentManager(),但都没有帮助解决问题。如果片段的父活动扩展了活动,请改为扩展FragmentActivity。是的,我的父活动是MainActivity,它确实扩展了FragmentActivity。嗯,不知道这里发生了什么。。