0

I have ViewPager that is showing fragments : SearchFragment,FriendFragment. What I am struggling to do is to change SearchFragment to ChatFragment

There is a lot of feedback in replace-fragment-inside-a-viewpager/ yet I have some trouble with making any of these solutions work.

I think there might be something wrong with my way of creating interface, I had some trouble to make it callable from ViewPager as SearchActivity.newInstance(new MyListener {...} )

I reached the point now where I get

java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentTransaction android.support.v4.app.FragmentManager.beginTransaction()' on a null object reference at com.example.ashaneen.firebaseapp.adapters.MainScreenAdapter$1.onFragmentChange(MainScreenAdapter.java:44) at com.example.ashaneen.firebaseapp.fragments.SearchFragment$4.onComplete(SearchFragment.java:132)

MainScreenAdapter.class

public class MainScreenAdapter extends FragmentPagerAdapter implements SearchFragment.MyListener {

    private static final String TAG = "MainScreenAdapter";

    private FragmentManager fragmentManager;
    private Fragment fragment1;


    public MainScreenAdapter(FragmentManager fm) {
        super(fm);
    }



    @Override
    public Fragment getItem(int position)
    {
        switch (position)
        {
            case 0:
                if (fragment1 == null)
                {
                    fragment1 = SearchFragment.newInstance(new SearchFragment.MyListener() {
                        @Override
                        public void onFragmentChange() {
                            fragmentManager.beginTransaction().remove(fragment1).commit();
                            fragment1 = ChatFragment.newInstance();
                            notifyDataSetChanged();
                        }
                    });
                }
                return fragment1;
            case 1:
                return new FriendsFragment();
            default:
                return new ChatFragment();
        }
    }

    @Override
    public int getItemPosition(@NonNull Object object) {
        return POSITION_NONE;
    }
    @Override
    public void onFragmentChange() {

    }

SearchFragment.class

 public class SearchFragment extends android.support.v4.app.Fragment  {

        public SearchFragment() {
        }

        private String TAG = "Profile2Fragment";

        public interface MyListener
        {
             void onFragmentChange();
        }

        static MyListener myListener = new MyListener() {
            public void onFragmentChange() {

            }
        };

    public static SearchFragment newInstance(MyListener myListener) {

       SearchFragment.myListener = myListener;
       return new SearchFragment();
    }
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_search, container, false);

        button = view.findViewById(R.id.btn_search);
        waitingRoomReference = db.collection("awaiting_room");




        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) 

{
                    myListener.onFragmentChange();
                }
            }
        });

                return view;
            }
ashaneen
  • 127
  • 11

1 Answers1

1

Try changing this

public MainScreenAdapter(FragmentManager fm) {
    super(fm);
}

to

public MainScreenAdapter(FragmentManager fm) {
    super(fm);
    fragmentManager = fm;
}
Ranjan
  • 1,006
  • 10
  • 20
  • 1
    Fighting with this for second day in a row and You just come in like that... thank You so much, Ranjan :)) #NotAllHeroesWearCapes – ashaneen Jan 11 '18 at 13:20
  • You're welcome. Log says it all you just need to read is correctly. – Ranjan Jan 11 '18 at 13:25