Search code examples
androidandroid-actionbaractionbarsherlockandroid-viewpager

Actionbar icons overlaying


Has anyone seen this issue before? This is only happening using the emulator for a Gingerbread device, but my app has a ViewPager and when I swipe from the initial view to another view and back to the initial view, it looks like another set of icons are overlaying the initial icons in the Actionbar (using ActionbarSherlock):

Initial:

enter image description here

After swiping (notice icons are thicker):

enter image description here

This doesn't happen in ICS+ devices only Gingerbread.

ViewPager:

public class Main extends SherlockFragmentActivity
{
    private static List<Integer> mIds;
    private static SparseArray<Fragment> mPageReferenceMap = new SparseArray<Fragment>();

    @Override
    public void onCreate(final Bundle icicle)
    {    
        super.onCreate(icicle);

        setContentView(R.layout.main);

        mViewPager = (ViewPager)findViewById(R.id.viewpager);
        mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mMyFragmentPagerAdapter);

        mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                GetListingFragment().StopAnimation(); //needed to add this because the ActionView was showing on the other views when swiping
            }

            @Override
            public void onPageScrolled(int position, float offset, int offsetPixel) {
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        mIds = new ArrayList<Integer>();

        mIds.add(0);
        mIds.add(1);
        mIds.add(2);
    }

    @Override
    public void onResume()
    { 
        super.onResume();
        ActivityCompat.invalidateOptionsMenu(this);
    }

    private ListingFragment GetKeywordsFragment()
    {       
        ListingFragment lf = (ListingFragment)getSupportFragmentManager().findFragmentById(R.id.fragmentListing);

        if (lf == null)
        {
            final MyFragmentPagerAdapter fpa = (MyFragmentPagerAdapter)mViewPager.getAdapter();
            lf = (ListingFragment)fpa.getFragment(0);
        }

        return lf;
    }

    private static class MyFragmentPagerAdapter extends FragmentStatePagerAdapter  {  

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

        @Override  
        public Fragment getItem(int index) {
            if (index == 0)
            {
                final ListingFragment lf = ListingFragment.newInstance();
                mPageReferenceMap.put(index, lf);
                return lf;
            }
            else
            {
                final DetailFragment df = DetailFragment.newInstance(mIds.get(index));
                mPageReferenceMap.put(index, df);
                return df;
            }
        }  

        public Fragment getFragment(int key) {
            return mPageReferenceMap.get(key);
        }

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

Solution

  • Please look at this issue on the ActionBarSherlock Github. This issue is known and as of right now, it has not been fixed.