Search code examples
androidandroid-layoutandroid-fragmentsandroid-viewpagernavigation-drawer

viewpager.setCurretntItem() at button onClickListener


I am new to android app development and i am currently working on a project that have NavigationDrawer with TabBarLayout. My problem is that i had a fragment consisting of two button Login and register:

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

                fragmentManager=getActivity().getSupportFragmentManager();
                fragmentTransaction=fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.containerView,new TabFragment()).addToBackStack(null).commit();
            }
        });

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

                fragmentManager=getActivity().getSupportFragmentManager();
                fragmentTransaction=fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.containerView,new TabFragment()).addToBackStack(null).commit();
            }
        });

Now if i click on login or register button tabbar layout open. Now i want that if i click on login button , login fragment is show in tabbar layout and if i click on register button , register fragment is open in tabbar.

I also search on Google for that and find viewpager.setCurrentItembut i am unable to use that for my requirement

i use like this

public class TabFragment extends Fragment {

    public static TabLayout tabLayout;
    public static ViewPager viewPager;
    public static int int_items = 2 ;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View x=inflater.inflate(R.layout.tab_layout,null);

        tabLayout=(TabLayout)x.findViewById(R.id.tabs);
        viewPager=(ViewPager)x.findViewById(R.id.viewpager);

        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));

        viewPager.setCurrentItem(1); //here i am unable to decide how to open specific fragment

        tabLayout.post(new Runnable() {
            @Override
            public void run() {

                tabLayout.setupWithViewPager(viewPager);
            }
        });
        return x;
    }
    class MyAdapter extends FragmentPagerAdapter{

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

        @Override
        public Fragment getItem(int position) {
            switch (position)
            {
                case 0: return new Login();
                case 1: return new Registration();

            }

            return null;
        }

        @Override
        public int getCount() {
            return int_items;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position)
            {
                case 0:
                    return "Login";
                case 1:
                    return "Registration";
            }
            return null;
        }
    }

please hint me some logic to do that ...thanks in advance...


Solution

  • Pass a boolean with the button click and receive them in the TabFragment.

    Check the boolean and set the appropiate viewpager item:

    first in register and login button fragment pass value to determine which button is clicked

     lgn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    fragmentManager=getActivity().getSupportFragmentManager();
                    Bundle bundle=new Bundle();
                    bundle.putBoolean("Register",false);
                    TabFragment fragment=new TabFragment();
                    fragment.setArguments(bundle);
                    fragmentTransaction=fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.containerView,fragment).addToBackStack(null).commit();
                }
            });
    
            rgst.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
    
                    fragmentManager=getActivity().getSupportFragmentManager();
                    Bundle bundle=new Bundle();
                    bundle.putBoolean("Register",true);
                    TabFragment fragment=new TabFragment();
                    fragment.setArguments(bundle);
                    fragmentTransaction=fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.containerView,fragment).addToBackStack(null).commit();
                }
            });
    

    And after that in tabbar layout use this code to consider boolean values is true pr false

     @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    
            View x=inflater.inflate(R.layout.tab_layout,null);
    
            tabLayout=(TabLayout)x.findViewById(R.id.tabs);
            viewPager=(ViewPager)x.findViewById(R.id.viewpager);
    
            viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
    
    
            Bundle bundle=getArguments();
           check=bundle.getBoolean("Register");
            if (check)
            {
                viewPager.setCurrentItem(1);
            }
    
            tabLayout.post(new Runnable() {
                @Override
                public void run() {
    
                    tabLayout.setupWithViewPager(viewPager);
                }
            });
            return x;
        }