1

on this app, When I trying to navigate from "HomeFragment" to "DetailsActivity"then pressed back it's back to the same fragment and also the hamburger icon on click doesn't work

nav grpah

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mobile_navigation"
    app:startDestination="@id/nav_home">

    <fragment
        android:id="@+id/nav_home"
        android:name="com.blogspot.abtallaldigital.ui.home.HomeFragment"
        android:label="@string/home"
        tools:layout="@layout/fragment_home"/>

    <fragment
        android:id="@+id/nav_Accessory"
        android:name="com.blogspot.abtallaldigital.ui.accessory.AccessoryFragment"
        android:label="@string/accessory"
        tools:layout="@layout/fragment_accessory" />

    <fragment
        android:id="@+id/nav_Arcade"
        android:name="com.blogspot.abtallaldigital.ui.arcade.ArcadeFragment"
        android:label="@string/arcade"
        tools:layout="@layout/fragment_arcade" />

    <fragment
        android:id="@+id/nav_Fashion"
        android:name="com.blogspot.abtallaldigital.ui.fashion.FashionFragment"
        android:label="@string/fashion"
        tools:layout="@layout/fashion_fragment" />
    <fragment
        android:id="@+id/nav_Food"
        android:name="com.blogspot.abtallaldigital.ui.food.FoodFragment"
        android:label="@string/food"
        tools:layout="@layout/food_fragment" />
    <fragment
        android:id="@+id/nav_Heath"
        android:name="com.blogspot.abtallaldigital.ui.heath.HeathFragment"
        android:label="@string/heath"
        tools:layout="@layout/heath_fragment" />
    <fragment
        android:id="@+id/nav_Lifestyle"
        android:name="com.blogspot.abtallaldigital.ui.lifestyle.LifestyleFragment"
        android:label="@string/lifestyle"
        tools:layout="@layout/lifestyle_fragment" />
    <fragment
        android:id="@+id/nav_Sports"
        android:name="com.blogspot.abtallaldigital.ui.sports.SportsFragment"
        android:label="@string/sports"
        tools:layout="@layout/sports_fragment" />
    <dialog
        android:id="@+id/about"
        android:name="com.blogspot.abtallaldigital.ui.about.AboutFragment"
        android:label="about"
        tools:layout="@layout/about" />
    <activity
        android:id="@+id/detailsActivity"
        android:name="com.blogspot.abtallaldigital.ui.DetailsActivity"
        android:label="activity_details"
        tools:layout="@layout/activity_details" />
</navigation>

HomeFragment navigtion code

@Override
    public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        binding.homeRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(requireContext(),
                binding.homeRecyclerView, new RecyclerItemClickListener.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {

                Item item = itemArrayList.get(position);
                bundle.putParcelable("item",item);

                Navigation.findNavController(requireView())
                        .navigate(R.id.detailsActivity, bundle,
                                new NavOptions.Builder()
                                        .setPopUpTo(R.id.nav_home, true).build()
                        );

            }

            @Override
            public void onLongItemClick(View view, int position) {

            }
        }
        ));
    }

DetailsActivity

@AndroidEntryPoint
public class DetailsActivity extends AppCompatActivity {

    private static final String TAG = "DetailsActivity";
    private ActivityDetailsBinding binding;

    String url, title, content, youtubeThumbnailImageSrc, youTubeLink;
    int youtubeThumbnailImageSetVisibility;
    private PostViewModel postViewModel;
    private Item postItem;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityDetailsBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        postViewModel = new ViewModelProvider(this).get(PostViewModel.class);


        postItem = getIntent().getParcelableExtra("item");


        if (postItem != null) {

            Log.d(TAG, "onItemClick: item" + postItem.getTitle());

            final Document document = Jsoup.parse(postItem.getContent());
//                    final Elements elements = document.select("img");


            Element element = document.body();

            for (Element e : element.getElementsByClass
                    ("YOUTUBE-iframe-video")) {
                youtubeThumbnailImageSrc = e.attr("data-thumbnail-src");
                youTubeLink = e.attr("src");
                Log.e("YouTube thumbnail", youtubeThumbnailImageSrc);
                Log.e("Youtube link", youTubeLink);
            }

            if (youtubeThumbnailImageSrc == null) {
                youtubeThumbnailImageSetVisibility = 8;
            }

            url = postItem.getUrl();
            title = postItem.getTitle();
            content = postItem.getContent();


        }


//        blogImage = (ImageView) findViewById(R.id.blogImage);

        setSupportActionBar(binding.toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        binding.progressBar.setVisibility(View.VISIBLE);

        binding.titleTextView.setText(title);
        binding.blogContent.setMovementMethod(LinkMovementMethod.getInstance());


        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            binding.fab.bringToFront();
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            binding.scrollView.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
                //   Log.d("ScrollView","scrollX_"+scrollX+"_scrollY_"+scrollY+"_oldScrollX_"+oldScrollX+"_oldScrollY_"+oldScrollY);
                if (scrollY > 0 && binding.fab.isShown()) {
                    binding.fab.hide();
                } else if (scrollY < 22) {
                    binding.fab.show();

                }
            });
        } else {
            binding.scrollView.getViewTreeObserver().addOnScrollChangedListener(() -> {
                int mScrollY = binding.scrollView.getScrollY();
                if (mScrollY > 0 && binding.fab.isShown()) {
                    binding.fab.hide();
                } else if (mScrollY < 22) {
                    binding.fab.show();
                }
            });
        }


        binding.fab.setOnClickListener(view -> {
            String shareContent = title + "\n" + url;
            Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setType("text/plain");
            shareIntent.putExtra(Intent.EXTRA_TEXT, shareContent);
            shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

            try {
                startActivity(Intent.createChooser(shareIntent, title));
            } catch (Exception exception) {
                Log.e(TAG, "onCreate: " + exception);
            }
        });


        //       String imageSrc = getIntent().getStringExtra("blogImage");
        //       Glide.with(getApplicationContext()).load(imageSrc).into(blogImage);


        binding.youtubeThumbnailImage.setVisibility(youtubeThumbnailImageSetVisibility);
        binding.youtubeThumbnailImage.setAdjustViewBounds(true);
        Picasso.get().load(youtubeThumbnailImageSrc).into(binding.youtubeThumbnailImage);

        binding.youtubeThumbnailImage.setOnClickListener(view -> {
            Intent youTube = new Intent
                    (Intent.ACTION_VIEW, Uri.parse(youTubeLink));
            startActivity(youTube);
        });


        PicassoImageGetter imageGetter = new PicassoImageGetter(binding.blogContent, this);
        Spannable html;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            html = (Spannable) Html.fromHtml(content, Html.FROM_HTML_MODE_LEGACY, imageGetter, null);
        } else {
            html = (Spannable) Html.fromHtml(content, imageGetter, null);
        }

        binding.blogContent.setText(html);


        binding.visitSite.setOnClickListener(view -> openCustomTab(this, Uri.parse(url)));
        binding.progressBar.setVisibility(View.GONE);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_details_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (item.getItemId() == R.id.action_add_to_favorites) {
            saveTogFavorites(item);
        } else if (item.getItemId() == R.id.action_share) {
            ShareActionProvider shareActionProvider =
                    (ShareActionProvider) MenuItemCompat.getActionProvider(item);
            shareActionProvider.setShareIntent(createShareIntent());
            return true;
        } else if (item.getItemId() == R.id.copyTheLink) {
            ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            ClipData clipData = ClipData.newPlainText("link", url);
            clipboardManager.setPrimaryClip(clipData);
            Toast.makeText(this, getString(R.string.linkCopied), Toast.LENGTH_LONG).show();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private void saveTogFavorites(MenuItem menuItem) {

//        Bundle bundle = getIntent().getParcelableExtra("postList");


        FavoritesEntity favoritesEntity = new FavoritesEntity(0,
                postItem);

        postViewModel.insertFavorites(favoritesEntity);
        menuItem.setIcon(R.drawable.ic_favorite);

        Snackbar.make(binding.getRoot(), "Saved", Snackbar.LENGTH_LONG).show();


    }

    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }

MainActivity


@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {

    @SuppressWarnings("unused")
    private AppBarConfiguration mAppBarConfiguration;
    public static Utils.DataStoreRepository DATA_STORE_REPOSITORY;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        DATA_STORE_REPOSITORY = new Utils.DataStoreRepository(this);

        setSupportActionBar(binding.appBarMain.toolbar);
        mAppBarConfiguration = new AppBarConfiguration.Builder(R.id.nav_home, R.id.nav_Accessory,
                R.id.nav_Arcade, R.id.nav_Fashion,
                R.id.nav_Food, R.id.nav_Heath,
                R.id.nav_Lifestyle, R.id.nav_Sports, R.id.about)
                .setOpenableLayout(binding.drawerLayout)
                .build();


        NavHostFragment navHostFragment = (NavHostFragment)
                getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);

        assert navHostFragment != null;
        NavController navController = navHostFragment.getNavController();

        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(binding.navView, navController);


    }


    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }

}

While I searching for the solution of this issue, I saw the similar question and I use viewModel with MutableLiveData but not to handle the events

Dr Mido
  • 2,414
  • 4
  • 32
  • 72
  • In HomeFragment, what if you set the `isPopUpToInclusive` to `false` in `.setPopUpTo(R.id.nav_home, true).build()`.. I think setting it to true removes the home fragment from the back stack – Zain Oct 06 '21 at 04:36
  • @zain I tried false option but no change – Dr Mido Oct 06 '21 at 10:47

3 Answers3

3

Why do you have to create another Activity?

The default behaviour of the Navigation Component is to use one Activity and multiple Fragments.

You should create an adapter to show these datas on item and then implement on ItemClickListener interface to pass the selected item clicked from adapter to HomeFragment. From HomeFragment you can implement the interface and send the current clicked Item to DetailsFragment not DetailsActivity(which you have to change) , you can send it with args.

Do not use more than one Activity in the Navigation Component.

Shqipdon
  • 31
  • 3
  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Oct 06 '21 at 09:39
  • I already tried to make details as a fragment but are multible problems, first I am unable to create a toolbar and if I tried I see two toolbars, one owned by MainActivity and other owned by fragment itself, second problem is when I navigate back with back button of one toolbar it's navigate to homeFragmet also so the problem not solved, and when I tried to navigte with main back button "in the down" I got ClassNotFound Exception – Dr Mido Oct 06 '21 at 10:45
  • 1
    What you can do is that you can hide the current toolbar that is in the MainActivity by calling the ====> `navController.addOnDestinationChangedListener((navController1, navDestination, bundle) -> { if (navDestination.getId() == R.id.detailsFragment) { binding.appBarMain.toolbar.setVisibility(View.GONE);` and after that you can show your custom toolbar in this fragment / and also if you want to override your back toolbar button then you can check this one: https://stackoverflow.com/questions/55904485/custom-navigate-up-behavior-for-certain-fragment-using-navigation-component – Shqipdon Oct 06 '21 at 12:55
  • @shqipdon thanks, I changed the stracure and move te code from activity to fragment like MML answer – Dr Mido Oct 09 '21 at 15:28
1

Try this solution

  1. Create new fragment DetailsFragment and move your code from DetailsActivity to it,
    Don't override onSupportNavigateUp
public class DetailsFragment extends Fragment {

    private static final String TAG = "DetailsFragment";

    private FragmentDetailsBinding binding;

    String url, title, content, youtubeThumbnailImageSrc, youTubeLink;
    int youtubeThumbnailImageSetVisibility;
    private PostViewModel postViewModel;

    @Override
    public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        postViewModel = new ViewModelProvider(this).get(PostViewModel.class);
        Log.d(TAG, "onCreate checkSavedFavoritesItems: " + postFavoritesSavedId);


        postItem = DetailsFragmentArgs.fromBundle(getArguments()).getPostItem();


        final Document document = Jsoup.parse(postItem.getContent());
//                    final Elements elements = document.select("img");

        Element element = document.body();

        for (Element e : element.getElementsByClass
                ("YOUTUBE-iframe-video")) {
            youtubeThumbnailImageSrc = e.attr("data-thumbnail-src");
            youTubeLink = e.attr("src");
            Log.e("YouTube thumbnail", youtubeThumbnailImageSrc);
            Log.e("Youtube link", youTubeLink);
        }

        if (youtubeThumbnailImageSrc == null) {
            youtubeThumbnailImageSetVisibility = 8;
        }

        url = postItem.getUrl();
        title = postItem.getTitle();
        content = postItem.getContent();


        //        blogImage = (ImageView) findViewById(R.id.blogImage);

        setHasOptionsMenu(true);
//        Objects.requireNonNull(getSupportActionBar()).setDisplayShowTitleEnabled(false);
        Objects.requireNonNull( ((MainActivity) requireActivity())
                .getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
//        getSupportActionBar().setDisplayShowHomeEnabled(true);

        binding.progressBar.setVisibility(View.VISIBLE);

        binding.titleTextView.setText(title);
        binding.blogContent.setMovementMethod(LinkMovementMethod.getInstance());


        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            binding.fab.bringToFront();
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            binding.scrollView.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
                //   Log.d("ScrollView","scrollX_"+scrollX+"_scrollY_"+scrollY+"_oldScrollX_"+oldScrollX+"_oldScrollY_"+oldScrollY);
                if (scrollY > 0 && binding.fab.isShown()) {
                    binding.fab.hide();
                } else if (scrollY < 22) {
                    binding.fab.show();

                }
            });
        } else {
            binding.scrollView.getViewTreeObserver().addOnScrollChangedListener(() -> {
                int mScrollY = binding.scrollView.getScrollY();
                if (mScrollY > 0 && binding.fab.isShown()) {
                    binding.fab.hide();
                } else if (mScrollY < 22) {
                    binding.fab.show();
                }
            });
        }


        binding.fab.setOnClickListener(view2 -> {
            String shareContent = title + "\n" + url;
            Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setType("text/plain");
            shareIntent.putExtra(Intent.EXTRA_TEXT, shareContent);
            shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

            try {
                startActivity(Intent.createChooser(shareIntent, title));
            } catch (Exception exception) {
                Log.e(TAG, "onCreate: " + exception);
            }
        });


        //       String imageSrc = getIntent().getStringExtra("blogImage");
        //       Glide.with(getApplicationContext()).load(imageSrc).into(blogImage);


        binding.youtubeThumbnailImage.setVisibility(youtubeThumbnailImageSetVisibility);
        binding.youtubeThumbnailImage.setAdjustViewBounds(true);
        Picasso.get().load(youtubeThumbnailImageSrc).into(binding.youtubeThumbnailImage);

        binding.youtubeThumbnailImage.setOnClickListener(view1 -> {
            Intent youTube = new Intent
                    (Intent.ACTION_VIEW, Uri.parse(youTubeLink));
            startActivity(youTube);
        });


        PicassoImageGetter imageGetter = new PicassoImageGetter(binding.blogContent, requireContext());
        Spannable html;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            html = (Spannable) Html.fromHtml(content, Html.FROM_HTML_MODE_LEGACY, imageGetter, null);
        } else {
            html = (Spannable) Html.fromHtml(content, imageGetter, null);
        }

        binding.blogContent.setText(html);


        binding.visitSite.setOnClickListener(view3 -> openCustomTab(requireContext(), Uri.parse(url)));
        binding.progressBar.setVisibility(View.GONE);
    }

    private Item postItem;
    private boolean postFavoritesSaved = false;
    private int postFavoritesSavedId = 0;
    private MenuItem menuItem;

    @Override
    public View onCreateView(@NotNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        binding =  FragmentDetailsBinding.inflate(inflater, container, false);
        return binding.getRoot();
    }


    @Override
    public void onCreateOptionsMenu(@NonNull Menu menu,
                                    @NonNull MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.activity_details_menu, menu);
        menuItem = menu.findItem(R.id.action_add_to_favorites);
        checkSavedFavoritesItems(menuItem);
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        menuItem.setIcon(R.drawable.ic_favorite_border);
    }

    private void checkSavedFavoritesItems(MenuItem menuItem) {
        postViewModel.getAllFavorites().observe(this, favoritesEntity -> {
            try {
                for (FavoritesEntity savedPost: favoritesEntity) {
                    if (savedPost.getItem().getId().equals(postItem.getId())) {
                        menuItem.setIcon(R.drawable.ic_favorite);
                        postFavoritesSavedId = savedPost.getId();
                        Log.d(TAG, "checkSavedFavoritesItems: " + postFavoritesSavedId);
                        postFavoritesSaved = true;
                    }
                }
            } catch (Exception exception) {
                Log.e(TAG, "checkSavedFavoritesItems: " + exception.getMessage());
            }
        });
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {

        if (menuItem.getItemId() == R.id.action_add_to_favorites && !postFavoritesSaved) {
            saveTogFavorites(menuItem);
        } else if (menuItem.getItemId() == R.id.action_add_to_favorites && postFavoritesSaved) {
            removePostFromFavorites(menuItem);
        } else if (menuItem.getItemId() == R.id.action_share) {
            ShareActionProvider shareActionProvider =
                    (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
            shareActionProvider.setShareIntent(createShareIntent());
            return true;
        } else if (menuItem.getItemId() == R.id.copyTheLink) {
            ClipboardManager clipboardManager = (ClipboardManager)
                    requireActivity().getSystemService(Context.CLIPBOARD_SERVICE);
            ClipData clipData = ClipData.newPlainText("link", url);
            assert clipboardManager != null;
            clipboardManager.setPrimaryClip(clipData);
            Toast.makeText(requireContext(), getString(R.string.linkCopied), Toast.LENGTH_LONG).show();
            return true;
        }

        return super.onOptionsItemSelected(menuItem);
    }

    private void saveTogFavorites(MenuItem menuItem) {
        FavoritesEntity favoritesEntity = new FavoritesEntity(0,
                postItem);

        postViewModel.insertFavorites(favoritesEntity);
        menuItem.setIcon(R.drawable.ic_favorite);
        Snackbar.make(binding.getRoot(), "Saved", Snackbar.LENGTH_LONG).show();
        postFavoritesSaved = true;
    }


    private void removePostFromFavorites(MenuItem menuItem) {
        FavoritesEntity favoritesEntity = new FavoritesEntity(postFavoritesSavedId,
                postItem);

        Log.d(TAG, "checkSavedFavoritesItems: " + postFavoritesSavedId);
        postViewModel.deleteFavoritePost(favoritesEntity);
        menuItem.setIcon(R.drawable.ic_favorite_border);
        Snackbar.make(binding.getRoot(),
                "Post deleted from favorites", Snackbar.LENGTH_LONG).show();
        postFavoritesSaved = false;
    }
  1. add DetailsFragment to nav_graph and add argument to it postItem as Parcelable
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mobile_navigation"
    app:startDestination="@id/nav_home">

    <fragment
        android:id="@+id/nav_home"
        android:name="com.blogspot.abtallaldigital.ui.home.HomeFragment"
        android:label="@string/home"
        tools:layout="@layout/fragment_home">
        <action
            android:id="@+id/action_nav_home_to_detailsFragment"
            app:destination="@id/detailsFragment"
            app:popUpTo="@id/nav_home" />
    </fragment>

    <fragment
        android:id="@+id/nav_Accessory"
        android:name="com.blogspot.abtallaldigital.ui.accessory.AccessoryFragment"
        android:label="@string/accessory"
        tools:layout="@layout/fragment_accessory" >
        <action
            android:id="@+id/action_nav_Accessory_to_detailsFragment"
            app:destination="@id/detailsFragment" />
    </fragment>

    <fragment
        android:id="@+id/nav_Arcade"
        android:name="com.blogspot.abtallaldigital.ui.arcade.ArcadeFragment"
        android:label="@string/arcade"
        tools:layout="@layout/fragment_arcade" >
        <action
            android:id="@+id/action_nav_Arcade_to_detailsFragment"
            app:destination="@id/detailsFragment" />
    </fragment>

    <fragment
        android:id="@+id/nav_Fashion"
        android:name="com.blogspot.abtallaldigital.ui.fashion.FashionFragment"
        android:label="@string/fashion"
        tools:layout="@layout/fashion_fragment" >
        <action
            android:id="@+id/action_nav_Fashion_to_detailsFragment"
            app:destination="@id/detailsFragment" />
    </fragment>
    <fragment
        android:id="@+id/nav_Food"
        android:name="com.blogspot.abtallaldigital.ui.food.FoodFragment"
        android:label="@string/food"
        tools:layout="@layout/food_fragment" >
        <action
            android:id="@+id/action_nav_Food_to_detailsFragment"
            app:destination="@id/detailsFragment" />
    </fragment>
    <fragment
        android:id="@+id/nav_Heath"
        android:name="com.blogspot.abtallaldigital.ui.heath.HeathFragment"
        android:label="@string/heath"
        tools:layout="@layout/heath_fragment" >
        <action
            android:id="@+id/action_nav_Heath_to_detailsFragment"
            app:destination="@id/detailsFragment" />
    </fragment>
    <fragment
        android:id="@+id/nav_Lifestyle"
        android:name="com.blogspot.abtallaldigital.ui.lifestyle.LifestyleFragment"
        android:label="@string/lifestyle"
        tools:layout="@layout/lifestyle_fragment" >
        <action
            android:id="@+id/action_nav_Lifestyle_to_detailsFragment"
            app:destination="@id/detailsFragment" />
    </fragment>
    <fragment
        android:id="@+id/nav_Sports"
        android:name="com.blogspot.abtallaldigital.ui.sports.SportsFragment"
        android:label="@string/sports"
        tools:layout="@layout/sports_fragment" >
        <action
            android:id="@+id/action_nav_Sports_to_detailsFragment"
            app:destination="@id/detailsFragment" />
    </fragment>
    <dialog
        android:id="@+id/about"
        android:name="com.blogspot.abtallaldigital.ui.about.AboutFragment"
        android:label="about"
        tools:layout="@layout/about" />
    <fragment
        android:id="@+id/detailsFragment"
        android:name="com.blogspot.abtallaldigital.ui.DetailsFragment"
        android:label="Post details"
        tools:layout="@layout/fragment_details" >
        <argument
            android:name="postItem"
            app:argType="com.blogspot.abtallaldigital.pojo.Item" />
    </fragment>
</navigation>
  1. Finally in HomeFragment write the navigation code with pass the parcelable item like this
@Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        navController = Navigation.findNavController(requireView());

        binding.homeRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(requireContext(),
                binding.homeRecyclerView, new RecyclerItemClickListener.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {

                Item item = itemArrayList.get(position);

                if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.nav_home) {
                    Navigation.findNavController(requireView())
                            .navigate(HomeFragmentDirections.actionNavHomeToDetailsFragment(item));
                }

            }

            @Override
            public void onLongItemClick(View view, int position) {

            }
        }
        ));
    }

about the toolbars issue you can choose either use the fragment custom toolbar or use the app theme toolbar not both, please let me know if soultion working

MML
  • 44
  • 1
  • 8
  • 21
0

you can try removing the fragment from the fragment manager like this:

Fragment fragmentByTag = getFragmentManager().
                    findFragmentByTag("Old fragment tag");
            if (fragmentByTag != null) {
                getFragmentManager().beginTransaction()
                        .remove(fragmentByTag).commit();
            }
Roy Katz
  • 26
  • 2