Android FragmentTransaction在检查是否(Fragment!=null)后崩溃

Android FragmentTransaction在检查是否(Fragment!=null)后崩溃,android,android-fragments,Android,Android Fragments,我在youtube上看教程,结果遇到了问题 本教程的目标是通过在按钮下方的布局中添加/删除/替换片段的按钮来引入片段事务。直到最后一切都很顺利 如果我点击“添加”按钮,它会在下面的布局中添加碎片,如果点击移除,它会消失。但是,如果你点击“添加”2+次,那么你需要点击删除2+次才能去除所有这些。同样,如果你点击“添加A”然后点击“添加B”,你需要先点击“删除A”,然后才能看到片段B 在视频的最后,他们在“Remove”方法中加入了if语句,以检查片段是否已经存在 public void Remov


我在youtube上看教程,结果遇到了问题

本教程的目标是通过在按钮下方的布局中添加/删除/替换片段的按钮来引入片段事务。直到最后一切都很顺利

如果我点击“添加”按钮,它会在下面的布局中添加碎片,如果点击移除,它会消失。但是,如果你点击“添加”2+次,那么你需要点击删除2+次才能去除所有这些。同样,如果你点击“添加A”然后点击“添加B”,你需要先点击“删除A”,然后才能看到片段B

在视频的最后,他们在“Remove”方法中加入了if语句,以检查片段是否已经存在

public void RemoveA (View v) {

FragmentA FA = (FragmentA) manager.findFragmentByTag("A");
FragmentTransaction transaction = manager.beginTransaction();

    if (FA != null) {
    //remove the transaction and commit 
    }
    else {
    //Toast a message to say the FragmentA doesn't exist yet 
    }
}
所以我想我可以在“AddA”方法中添加一个类似的东西来检查片段a是否存在,然后吐司一条消息说它已经存在,如果它不存在,则添加它以避免在您只需要1时创建这么多片段

public void AddA (View v) {

FragmentA FA = (FragmentA) manager.findFragmentByTag("A");
FragmentTransaction transaction = manager.beginTransaction();

    if (FA != null) {
    Toast.maketext(this, "Fragment already exists", Toast.LENGTH_SHORT).show()); 
    }
    else {
    transaction.add(FA);
    transaction.commit();
    }
}
然而,当您点击“AddA”时,程序会出现意外错误并退出。查看Logcat(我上周刚开始学习,所以我不知道所有内容的含义),我注意到有一行提到了
nullpointerexception

transaction.add(FA);
与此同时,IntelliJ表示:

if (FA != null)
始终为真,而FA==始终为假。我还尝试附加&&isvisible,但这也没有什么不同。关于为什么会发生这种情况,有什么想法吗


这是我的第一篇帖子,我在谷歌/搜索上找不到答案。

查看您的代码:

if (FA != null) { // here FA is not null
    Toast.maketext(this, "Fragment already exists", Toast.LENGTH_SHORT).show()); }
else {   // here, FA is null!
    transaction.add(FA);   // same as transaction.add(null);
    transaction.commit();
}
else
块中,您缺少一些代码,在将其添加到事务之前,您将在FA中创建一个新片段

if (FA != null) {
    Toast.maketext(this, "Fragment already exists", Toast.LENGTH_SHORT).show()); }
else {
    // Create a new fragment here and set it to FA
    transaction.add(FA);
    transaction.commit();
}

我尝试在循环之前创建一个新片段a,否则它无法检查FA是否为空。>FragmentA FA=新的FragmentA();>FragmentTransaction=manager.beginTransaction();>如果(FA!=null)>{Toast.maketext(这个,“片段已经存在,Toast.LENGTH.SHORT”);}>else{>transaction.add(FA);>transaction.commit();}无效,它仍然在这里崩溃。然后我尝试将一个>FragmentA FA2=FA;放在else循环中,但即使片段还不存在,它也在烘烤消息?