Я пытаюсь обновить свой интерфейс, получив текущий фрагмент в моем контейнере и вызывая его метод. Моя раскладка выглядит следующим образом:getSupportFragmentManager(). FindFragmentByTag() возвращает null
<?xml version="1.0" encoding="UTF-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/frmContentFrame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
<!-- The navigation drawer -->
<ListView android:id="@+id/lstLeftDrawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:background="@color/SlideMenuBlue"
android:divider="@color/White"
android:dividerHeight="1dp"
android:paddingTop="@dimen/list_padding"
android:paddingBottom="@dimen/list_padding"/>
</android.support.v4.widget.DrawerLayout>
Я переходящий между осколками (android.support.v4.app) как так
//Switches views
public void switchContent(final Fragment fragment) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.frmContentFrame, fragment, "CURRENT_FRAGMENT")
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack(null)
.commitAllowingStateLoss();
}
И когда я называю обновление метода UI моего фрагментом является недействительным. Вот код
public void updateUI() {
Fragment fragment = getSupportFragmentManager().findFragmentByTag("CURRENT_FRAGMENT");
System.out.println(fragment);
if((FragmentA) getSupportFragmentManager().findFragmentByTag("CURRENT_FRAGMENT") != null){
FragmentA frag = (FragmentA) getSupportFragmentManager().findFragmentByTag("CURRENT_FRAGMENT");
frag.updateUIStatusA();
}
else if((FragmentB) getSupportFragmentManager().findFragmentByTag("CURRENT_FRAGMENT") != null){
FragmentB frag = (FragmentB) getSupportFragmentManager().findFragmentByTag("CURRENT_FRAGMENT");
frag.updateUIStatusB();
}
}
Странная вещь, в то время как фрагмент возвращается нуль я получаю ClassCastException
вроде следующего
java.lang.ClassCastException: com.example.activity.fragments.FragmentB cannot be cast to com.example.activity.fragments.FragmentA
Почему это, что она знает, что в сообщении об ошибке, что фрагмент я имею в мой контейнер, но возвращает null, когда я пытаюсь его восстановить?
Любая помощь будет большим
Благодаря
вы получите CCE, потому что фрагмент в CURRENT_FRAGMENT может быть А или B. Вы должны получить фрагмент, а затем проверить, если это конкретный «экземпляр» чего-то перед тем, как вы произнесите. –
для нулевого значения, помните, что транзакции фрагментов являются асинхронными. поэтому после вызова 'commit()' вам не гарантируется, что последующий фрагмент find вернет фрагмент. –
@JeffreyBlattman благодарит вас за ввод. Я изменил это, и он отлично поработал. спасибо – BigT