Das Problem ist, weil Sie versuchen, den MainFragment mit der ID zu erhalten:
MainFragment mainFragment = (MainFragment) fm.findFragmentById(R.id.fragment_container);
was falsch ist, weil man nicht sicher sein kann, Was ist das Fragment im Container? Und weil die ID die Container-ID ist, nicht die Fragment-ID.
Sie müssen die MainFragment erhalten, indem den Tag verwenden, die Sie bereits vor im Einsatz haben:
fm.beginTransaction()
.add(R.id.fragment_container, MainFragment.newInstance(),"mainFragment")
.commit();
Hier ist der Tag mainFragment
ist. So nennen es durch die Verwendung findFragmentByTag:
MainFragment mainFragment = (MainFragment) fm.findFragmentByTag("mainFragment");
Sie nur findFragmentById
verwenden können, wenn Sie das Fragment mit der ID im Layout mit so etwas wie erklärt haben:
<fragment class="com.example.SampleFragment"
android:id="@+id/sample_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Dann können Sie das Fragment, das durch seine ID erhalten :
MainFragment mainFragment = (MainFragment) fm.findFragmentById(R.id.sample_fragment);
Darüber hinaus können Sie den MainFragment nicht, wenn man es zu erhalten, nachdem das Hinzufügen über FragmentManager wie dies versuchen:
fm.beginTransaction()
.add(R.id.fragment_container, MainFragment.newInstance(),"mainFragment")
.commit();
// This won't work!
MainFragment mainFragment = (MainFragment) fm.findFragmentByTag("mainFragment");
Wenn Sie MainFragment.newInstance()
aufrufen, ist der Prozess asynchron, wo das MainFragment noch nicht erstellt wurde. Sie werden also auf null zeigen.
Sie könnten 'commitNow()', das ist synchrnous –