Фрагмент не вызывает метод OnCreate

Я хочу создать макет нижней навигации с фрагментами. Но я не могу показать фрагменты в своем заявлении. Я показал много видео с фрагментами, пробовал много способов показать фрагмент, но все равно не могу показать фрагменты в своем приложении. пожалуйста, если возможно тогда решите мою проблему.

package com.example.login;

import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Switch;

import com.example.login.ui.login.ChatFragment;
import com.example.login.ui.login.HomeFragment;
import com.example.login.ui.login.MyAddsFragment;
import com.example.login.ui.login.PostAddFragment;
import com.example.login.ui.login.ProfileFragment;
import com.google.android.material.bottomnavigation.BottomNavigationView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;

public class HomeActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemReselectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_home2);
   BottomNavigationView navView = findViewById(R.id.nav_view);
   navView.setOnNavigationItemReselectedListener(this);
   }

   private BottomNavigationView.OnNavigationItemSelectedListener navListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
               Fragment fragment = null;
                switch (menuItem.getItemId()) {
                    case R.id.navigation_home:
                        fragment = new HomeFragment();
                        break;

                    case R.id.navigation_chat:
                        fragment = new ChatFragment();
                        break;

                    case R.id.navigation_post_add:
                        fragment = new PostAddFragment();
                        break;

                    case R.id.navigation_my_adds:
                        fragment = new MyAddsFragment();
                        break;

                    case R.id.navigation_profile:
                        fragment = new ProfileFragment();
                        break;


                }
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
                return true;
            }
        };

        @Override
        public void onNavigationItemReselected(@NonNull MenuItem menuItem) {

        }
    }

Файлы XML activity_home.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize">



<fragment
    android:id="@+id/fragment_container"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    app:navGraph="@navigation/mobile_navigation"
    android:layout_marginBottom="56dp"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/yellow"
        app:itemIconTint="@color/orange"
        app:itemTextColor="@color/black"
        android:layout_alignParentBottom="true"
        app:menu="@menu/bottom_nav_menu" />

</RelativeLayout>

person Pratik PSB    schedule 02.01.2020    source источник
comment
Пожалуйста, добавьте также свой xml   -  person Sonu Sanjeev    schedule 02.01.2020


Ответы (3)


Вы забыли написать эту строчку:

 navView.setNavigationItemSelectedListener(this);

Ваш новый обновленный код:

package com.example.login;

import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Switch;

import com.example.login.ui.login.ChatFragment;
import com.example.login.ui.login.HomeFragment;
import com.example.login.ui.login.MyAddsFragment;
import com.example.login.ui.login.PostAddFragment;
import com.example.login.ui.login.ProfileFragment;
import com.google.android.material.bottomnavigation.BottomNavigationView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;

public class HomeActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemReselectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_home2);
   BottomNavigationView navView = findViewById(R.id.nav_view);
   navView.setOnNavigationItemSelectedListener(navListener);
   navView.setOnNavigationItemReselectedListener(navView);
   }

   private BottomNavigationView.OnNavigationItemSelectedListener navListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
               Fragment fragment = null;
                switch (menuItem.getItemId()) {
                    case R.id.navigation_home:
                        fragment = new HomeFragment();
                        break;

                    case R.id.navigation_chat:
                        fragment = new ChatFragment();
                        break;

                    case R.id.navigation_post_add:
                        fragment = new PostAddFragment();
                        break;

                    case R.id.navigation_my_adds:
                        fragment = new MyAddsFragment();
                        break;

                    case R.id.navigation_profile:
                        fragment = new ProfileFragment();
                        break;


                }
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
                return true;
            }
        };

        @Override
        public void onNavigationItemReselected(@NonNull MenuItem menuItem) {

        }
    }

И структура XML-элементов выглядит так:

<DrawerLayout>
    <FrameLayout/>
    <NavigationView/>
</DrawerLayout>
person InsaneCat    schedule 02.01.2020
comment
Сообщение о сбое здесь. Первый стиль XML Chaneg, упомянутый выше, см .: stackoverflow.com/a/48007923/3974530 - person InsaneCat; 02.01.2020
comment
Ваша XML-структура неверна, попробуйте эту демонстрацию: github.com/afrussel/bottom-bar_with-fragments < / а> - person InsaneCat; 02.01.2020

Попробуйте использовать метод fragment.add ().

person UserAndroid    schedule 02.01.2020

Вы забыли настроить слушателя. Добавь это:

navView.setOnNavigationItemSelectedListener(navListener);

Кроме того, на основании вашего последнего редактирования это запрещено:

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();

потому что fragment_container - это фрагмент. Он должен быть типа ViewGroup, например LinearLayout.

person user1506104    schedule 02.01.2020