检查if(Fragment!= null)后FragmentTransaction崩溃

时间:2014-09-11 17:34:16

标签: android android-fragments


我在youtube上关注this教程并遇到了最终结果的问题。

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

如果我点击"添加A"按钮,它在下面的布局中添加了Frag_A,如果你点击删除,它就会消失。但是,如果你点击了#34;添加A" 2次以上,然后你需要删除2次以上,以摆脱所有这些。同样,如果你点击"添加A"然后"添加B",你需要点击"删除A"首先,你可以看到片段B。

在视频结束时,他们在"删除"中添加了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"中加入类似的东西。检查FragmentA是否存在的方法,然后向其提供一条消息说它已经存在,如果它不存在,添加它以避免在你只需要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); 的一行:

if (FA != null)

同时,IntelliJ说:

{{1}}

总是如此,FA ==总是假的。我也试过追加&&看不见,但这也没有什么不同。对于为什么会发生这种情况有什么想法吗?

这是我的第一篇文章,我无法在google / search上找到答案。

1 个答案:

答案 0 :(得分:0)

查看您的代码:

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