okaybroda / FragmentStateManager

An Android library that holds fragment states for bottom navigation view even when activity rotates.
MIT License
53 stars 15 forks source link

Null pointer when trying to implement #3

Closed HBiSoft closed 5 years ago

HBiSoft commented 6 years ago

I'm using a BottomNavigationView and before using this library I implemented it like this:

bottomNavigationView.setOnNavigationItemSelectedListener
                (new BottomNavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                        Fragment selectedFragment = null;

                        switch (item.getItemId()) {
                            case R.id.action_item1:
                                selectedFragment = PlacesFragment.newInstance();
                                break;
                            case R.id.action_item2:
                                selectedFragment = MapFragment.newInstance();
                                break;
                            case R.id.action_item3:
                                selectedFragment = SaveFragment.newInstance();
                                break;
                            case R.id.action_item4:
                                selectedFragment = InfoFragment.newInstance();
                                break;
                        }
                        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                        transaction.replace(R.id.frame_layout, selectedFragment);
                        transaction.commit();
                        return true;
                    }
                });

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.frame_layout, PlacesFragment.newInstance());
        transaction.commit();

    }

The problem is that I can't get it to work like your example I tried the following:

bottomNavigationView.setOnNavigationItemSelectedListener
                (new BottomNavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                        switch (item.getItemId()) {
                            case R.id.action_item1:
                                fragmentStateManager.changeFragment(0);
                                break;
                            case R.id.action_item2:
                                fragmentStateManager.changeFragment(1);
                                break;
                            case R.id.action_item3:
                                fragmentStateManager.changeFragment(3);
                                break;
                            case R.id.action_item4:
                                fragmentStateManager.changeFragment(4);
                                break;
                        }
                        return true;
                    }
                });

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.frame_layout, PlacesFragment.newInstance());
        transaction.commit();

    }

I don't understand what is getNavPositionFromMenuItem that you provided in your example?

Can you please help me to integrate it correctly?

okaybroda commented 6 years ago

https://github.com/okaybroda/FragmentStateManager/blob/60b4177a351ef9be134c5aac066dd37a43306bf0/app/src/main/java/com/viven/fragmentstatemanager/app/MainActivity.java#L72

You can take a look at the sample app.