3

I am using ViewPager with Tablayout in my app. Tablayout has four tabs each with different fragments.

I want to set current item to the viewpager based on certain values from the Interface. the following works as desired if I start the app for first time, but after I close and open the activity the expected behavior doesn't occurs.

Below is the code I am using.

@Override
public void getNotify(int type) {    // overriden method of the Interface. 
    System.out.println("getNotify ========>"+type);
    switch (type){
        case 0:
            new Handler().post(new Runnable() {
                @Override
                public void run() {
                    try {
                        viewPager.setCurrentItem(0);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            });
            break;

        case 1:
            new Handler().post(new Runnable() {
                @Override
                public void run() {
                    try {
                        viewPager.setCurrentItem(1);   //switch - case works fine but this code is not setting currentItem.
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            });
            break;

        case 2:
            new Handler().post(new Runnable() {
                @Override
                public void run() {
                    viewPager.setCurrentItem(2);
                }
            });
            break;

        case 3:
            new Handler().post(new Runnable() {
                @Override
                public void run() {
                    viewPager.setCurrentItem(3);
                }
            });
            break;
    }
}

------------onResume()-----------------

 @Override
protected void onResume() {
    super.onResume();
    viewPager = (ViewPager) findViewById(R.id.pager);
    setupViewPager(viewPager);   //this method will setViewPager

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

----------setupViewPager()--------------

 private void setupViewPager(ViewPager viewPager) {
    Bundle bundle = new Bundle();
    bundle.putInt("MEASURE_TYPE", MEASURE_TYPE);
    adapter = new ViewPagerAdapter(getSupportFragmentManager());

    TabFragment1 tab1 = new TabFragment1();
    tab1.setArguments(bundle);
    adapter.addFragment(tab1, "MIC");

    TabFragment2 tab2 = new TabFragment2();
    tab2.setArguments(bundle);
    adapter.addFragment(tab2, "Headset");

    TabFragment3 tab3 = new TabFragment3();
    tab3.setArguments(bundle);
    adapter.addFragment(tab3, "BT");

    TabFragment4 tab4 = new TabFragment4();
    tab4.setArguments(bundle);
    adapter.addFragment(tab3, "Speaker");

    viewPager.setAdapter(adapter);
}

All the above code is in same Mainactivity.java file.

I have referred many SO threads and tried many solutions provided but nothing helps. following are some of the SO threads I tried.

Android ViewPager setCurrentItem not working after onResume.

ViewPager SetCurrentItem does not set the position after it is clicked.

Also there is a similar bug opened at AOSP but there is no response over there also.

https://code.google.com/p/android/issues/detail?id=82002&q=viewPager.setCurrentItem()&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter%20Opened

Any help Appreciated. Thanks!

Community
  • 1
  • 1
karan
  • 8,637
  • 3
  • 41
  • 78

0 Answers0