OnBackStackChange监听器中的应用程序崩溃(无法获取片段)

时间:2016-09-29 09:54:48

标签: android android-fragments

我使用加载ActivityFragment List的{​​{1}}。 Fragment Detail在打开时以应用程序方式更改工具栏标题。当用户离开Fragment D时,返回Fragment D我想将Fragment L重置为原始标题。

以下是我在toolbar中添加的代码,用于检查mainActivity是否已关闭。

Fragment D

堆栈跟踪说我无法在空对象引用上调用 getSupportFragmentManager().addOnBackStackChangedListener(new android.support.v4.app.FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { Log.d("backstackbug", "back stack count = " + getSupportFragmentManager().getBackStackEntryCount()); if(getSupportFragmentManager().getBackStackEntryCount()>0) { } else { ((ListFragment) getSupportFragmentManager().findFragmentByTag("LIST_F_TAG")).resetToolbar(); } } }); 。 (我在移动设备上会发布整个跟踪)。 我不知道如果它位于后栈中,ListFragment.resetToolbar()如何为空。

交易:

ListFragment

2 个答案:

答案 0 :(得分:0)

我认为你颠倒了if块。试试这个

@Override
public void onBackStackChanged() {
    Log.d("backstackbug", "back stack count = " + getSupportFragmentManager().getBackStackEntryCount());
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        ListFragment listFragment = (ListFragment) getSupportFragmentManager().findFragmentByTag("LIST_F_TAG");
        if (listFragment != null) {
            listFragment.resetToolbar();
        }
    }
}

答案 1 :(得分:0)

我认为问题是你没有将片段添加到backstack

 fragmentTransection.addToBackStack(fragmentTag);

在提交之前执行此步骤