Нет просмотра для фрагмента.Как изменить фрагмент из основного класса, если - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть FrameLayout в макете заголовка меню ящика.И я хочу изменить элемент в этом FrameLayout в зависимости от того, авторизован он пользователем или нет.

У меня есть основной класс.Часть кода:

Ссылка на GitHub введите описание ссылки здесь

@Override
protected void onCreate(Bundle savedInstanceState) {
    changeTheme();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    if (savedInstanceState == null) {  getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProgramsFragment()).commit();
        navigationView.setCheckedItem(R.id.nav_programs);

    }
    contextOfApplication = getApplicationContext();
    changeLoginStatus();   
}


public void changeLoginStatus() {

    Fragment fragment = null;

    if (FirebaseAuth.getInstance().getCurrentUser() != null) {
        fragment = new NavHeaderAuthorized();
    } else fragment = new NavHeaderNotAuthorized();

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    fragmentTransaction.replace(R.id.fr_nav_header, fragment).commit();   //the problem is here
}`

И если я вызываю функцию changeLoginStatus () в методе onCreate, я вижу ошибку (еслиЯ вызываю функцию в других методах, все в порядке):

java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.example.oleg.slidemenu / com.android.fitapp.Main}: javaИсключениена android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2933) на android.app.ActivityThread.-wrap11 (неизвестный источник: 0) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1612) на android.os.Handler.dispatchMessage (Handler.java:105) на android.os.Looper.loop (Looper.java:164) на android.app.ActivityThread.main (ActivityThread.java:6710) наjava.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:240) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java): 770) Причина: java.lang.IllegalArgumentException: не найдено представление для идентификатора 0x7f09007a (com.example.oleg.slidemenu: id / fr_nav_header) для фрагмента NavHeaderNotAuthorized {c970472 # 1 id = 0x7f09007a} * 101 * 101 * 101

1013* Я знаю причину: значение R.id.fr_nav_header берет из MainActivity и возвращает ноль, потому что этот элемент находится в nav_header.xml.

nav_header.xml:

   <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:gravity="bottom"
    android:orientation="vertical"
    android:paddingLeft="16dp"
    android:paddingTop="25dp"
    android:paddingEnd="16dp"
    android:paddingRight="16dp"
    android:paddingBottom="16dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fontFamily="cursive"
        android:text="FitApp"
        android:textAlignment="center"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1"
        android:textColor="?attr/textColor"
        android:textSize="25dp" />
    <FrameLayout
        android:id="@+id/fr_nav_header"
        android:name="layout.NavHeaderNotAuthorized"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </FrameLayout>

</LinearLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...