Search code examples
androidandroid-fragmentsandroid-viewpager

How do i open a particular fragement page enshrined in viewpager from MainActivity when i click a button


I have been struggling to open some specific fragments enshrined in viewpager adapter from mainactivity. Now, the MainActivtity is entirely different from the Tips_4 Activity where i defined viewpager. What i want is when i click a button it will go staight and open a specific fragment.

This is also what i tried that opened just fragment_page1 when button is clicked but I want to target some specific page with button click from MainActivity.

Button Tips0 = (Button)findViewById(R.id.mybtn1);
        Tips0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(MainActivity.this, Tips_4.class);
                startActivity(i);
            }
        });

This is the MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //--------I added button click listeners below ----------
        Tips1 = (Button) findViewById(R.id.mybtn1);
        Tips1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Fragment fragment = Page1Fragment.newInstance(1, "Page # 1");
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.container, fragment);
                transaction.addToBackStack(null);
                transaction.commit();
            }
        });

        Tips2 = (Button) findViewById(R.id.mybtn2);
        Tips2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Fragment fragment = Page2Fragment.newInstance(1, "Page # 2");
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.container, fragment);
                transaction.addToBackStack(null);
                transaction.commit();
            }
        });

        Tips3 = (Button) findViewById(R.id.mybtn1);
        Tips3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Fragment fragment = Page3Fragment.newInstance(1, "Page # 3");
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.container, fragment);
                transaction.addToBackStack(null);
                transaction.commit();
            }
        });
    }

This is SimpleFragmentPageAdapter

public class SimpleFragmentPageAdapter extends FragmentPagerAdapter {
    private String[] tabtitle=new String[]{"Description","Directions","Developers","Page1","Page2","Page3","Page4","Page5","Page6","Page7","Page8","Page9","Page10","Page11","Page12","Page13","Page14","Page15","Page16","Page17","Page18","Page19","Page20","Page21","Page22","Page23","Page24","Page25","Page26","Page27","Page28","Page29","Page30","Page31","Page32","Page33","Page34","Page35","Page36","Page37","Page38","Page39","Page40","Page41","Page42","Page43","Page44"};
    Context context;
    private int pagecount=45;
    public SimpleFragmentPageAdapter(FragmentManager fm, Context context) {
        super(fm);
        this.context=context;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0: //Fragment # 0 - This will show DevelopersFragment
                return DescriptionFragment.newInstance(0, "page # 0");
            case 1: //Fragment # 0 - This will show Page1Fragment
                return Page1Fragment.newInstance(1, "Page # 1");
            case 2: //Fragment # 0 - This will show Page2Fragment
                return Page2Fragment.newInstance(2, "Page # 2");
            case 3: //Fragment # 0 - This will show Page3Fragment
                return Page3Fragment.newInstance(3, "Page # 3");
            case 4: //Fragment # 0 - This will show Page4Fragment
                return Page4Fragment.newInstance(4, "Page # 4");
            case 5: //Fragment # 0 - This will show Page5Fragment
                return Page5Fragment.newInstance(5, "Page # 5");
            case 6: //Fragment # 0 - This will show Page6Fragment
                return Page6Fragment.newInstance(6, "Page # 6");
            case 7: //Fragment # 0 - This will show Page7Fragment
                return Page7Fragment.newInstance(7, "Page # 7");
            case 8: //Fragment # 0 - This will show Page8Fragment
                return Page8Fragment.newInstance(8, "Page # 8");
            case 9: //Fragment # 0 - This will show Page9Fragment
                return Page9Fragment.newInstance(9, "Page # 9");
            case 10: //Fragment # 0 - This will show Page10Fragment
                return Page10Fragment.newInstance(10, "Page # 10");
            case 11: //Fragment # 0 - This will show Page11Fragment
                return Page11Fragment.newInstance(11, "Page # 11");
            case 12: //Fragment # 0 - This will show Page12Fragment
                return Page12Fragment.newInstance(12, "Page12");
            case 13: //Fragment # 0 - This will show Page13Fragment
                return Page13Fragment.newInstance(13, "Page13");
            case 14: //Fragment # 0 - This will show Page14Fragment
                return Page14Fragment.newInstance(14, "Page14");
            case 15: //Fragment # 0 - This will show Page15Fragment
                return Page15Fragment.newInstance(15, "Page15");
            case 16: //Fragment # 0 - This will show Page16Fragment
                return Page16Fragment.newInstance(16, "Page16");
            case 17: //Fragment # 0 - This will show Page17Fragment
                return Page17Fragment.newInstance(17, "Page17");
            case 18: //Fragment # 0 - This will show Page18Fragment
                return Page18Fragment.newInstance(18, "Page18");
            case 19: //Fragment # 0 - This will show Page19Fragment
                return Page19Fragment.newInstance(19, "Page19");
            case 20: //Fragment # 0 - This will show Page20Fragment
                return Page20Fragment.newInstance(20, "Page20");
            case 21: //Fragment # 0 - This will show Page21Fragment
                return Page21Fragment.newInstance(21, "Page21");
            case 22: //Fragment # 0 - This will show Page22Fragment
                return Page22Fragment.newInstance(22, "Page22");
            case 23: //Fragment # 0 - This will show Page23Fragment
                return Page23Fragment.newInstance(23, "Page23");
            case 24: //Fragment # 0 - This will show Page24Fragment
                return Page24Fragment.newInstance(24, "Page24");
            case 25: //Fragment # 0 - This will show Page25Fragment
                return Page25Fragment.newInstance(25, "Page25");
            case 26: //Fragment # 0 - This will show Page26Fragment
                return Page26Fragment.newInstance(26, "Page26");
            case 27: //Fragment # 0 - This will show Page27Fragment
                return Page27Fragment.newInstance(27, "Page27");
            case 28: //Fragment # 0 - This will show Page28Fragment
                return Page28Fragment.newInstance(28, "Page28");
            case 29: //Fragment # 0 - This will show Page29Fragment
                return Page29Fragment.newInstance(29, "Page29");
            case 30: //Fragment # 0 - This will show Page30Fragment
                return Page30Fragment.newInstance(30, "Page30");
            case 31: //Fragment # 0 - This will show Page31Fragment
                return Page31Fragment.newInstance(31, "Page31");
            case 32: //Fragment # 0 - This will show Page32Fragment
                return Page32Fragment.newInstance(32, "Page32");
            case 33: //Fragment # 0 - This will show Page33Fragment
                return Page33Fragment.newInstance(33, "Page33");
            case 34: //Fragment # 0 - This will show Page34Fragment
                return Page34Fragment.newInstance(34, "Page34");
            case 35: //Fragment # 0 - This will show Page35Fragment
                return Page35Fragment.newInstance(35, "Page35");
            case 36: //Fragment # 0 - This will show Page36Fragment
                return Page36Fragment.newInstance(36, "Page36");
            case 37: //Fragment # 0 - This will show Page37Fragment
                return Page37Fragment.newInstance(37, "Page37");
            case 38: //Fragment # 0 - This will show Page38Fragment
                return Page38Fragment.newInstance(38, "Page38");
            case 39: //Fragment # 0 - This will show Page39Fragment
                return Page39Fragment.newInstance(39, "Page39");
            case 40: //Fragment # 0 - This will show Page40Fragment
                return Page40Fragment.newInstance(40, "Page40");
            case 41: //Fragment # 0 - This will show Page41Fragment
                return Page41Fragment.newInstance(41, "Page41");
            case 42: //Fragment # 0 - This will show Page41Fragment
                return Page42Fragment.newInstance(42, "Page42");
            case 43: //Fragment # 0 - This will show Page41Fragment
                return Page43Fragment.newInstance(43, "Page43");
            case 44: //Fragment # 0 - This will show Page41Fragment
                return Page44Fragment.newInstance(44, "Page44");
            default:
                return null;
        }
    }

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

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return "Maths page" + position;
    }
}

This is Tips_4 Activity where i defined viewpager

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tips_4);

        toolbar= findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);

        ViewPager viewPager= (ViewPager) findViewById(R.id.view_pager);
        viewPager.setAdapter(new SimpleFragmentPageAdapter(getSupportFragmentManager(),this));

        //Attach the page change listener inside the activity
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            // This method will be invoked when a new page becomes selected
            @Override
            public void onPageSelected(int position) {
                Toast.makeText(Tips_4.this, "Selected Maths Page:" + position, Toast.LENGTH_SHORT).show();
            }
            // This method will be invoked when the current page is scrolled
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetpixels) {

            }
            // Called when the scroll state changes:
            //SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });


        tabLayout= (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.setupWithViewPager(viewPager);


    }



}

Solution

  • Add the page number you want to the intent you start the activity with the viewpager in and the use that to set the correct page to show.

    e.g.

    public void onClick(View view) {
        Intent i = new Intent(MainActivity.this, Tips_4.class);
        // Start page 5 as the number starts at zero set the value to 4           
        i.putExtra("startPage", 4);
        startActivity(i);
    }
    

    in Tips_4 Activity

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // Get the start page passed to us or default to first page
            Intent mIntent = getIntent();
            int startPage = mIntent.getIntExtra("startPage", 0);
    
            setContentView(R.layout.activity_tips_4);
    
            toolbar= findViewById(R.id.app_bar);
            setSupportActionBar(toolbar);
    
            ViewPager viewPager= (ViewPager) findViewById(R.id.view_pager);
            viewPager.setAdapter(new SimpleFragmentPageAdapter(getSupportFragmentManager(),this));
    
            // set the current page to the start page
            viewpager.setCurrentItem(startPage);
    
    ....