5

I tried to implement an android project in http://developer.android.com/training/animation/screen-slide.html and I have an error in one class

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.app.NavUtils;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class MainActivity extends FragmentActivity {
 private static final int NUM_PAGES = 5;
 private ViewPager mPager;
 private PagerAdapter mPagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager());
    mPager.setAdapter(mPagerAdapter);
    mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            // When changing pages, reset the action bar actions since they are dependent
            // on which page is currently active. An alternative approach is to have each
            // fragment expose actions itself (rather than the activity exposing actions),
            // but for simplicity, the activity provides the actions in this sample.
            invalidateOptionsMenu();
        }
    });
}
@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.activity_main, menu);

    menu.findItem(R.id.action_previous).setEnabled(mPager.getCurrentItem() > 0);

    // Add either a "next" or "finish" button to the action bar, depending on which       page
    // is currently selected.
    MenuItem item = menu.add(Menu.NONE, R.id.action_next, Menu.NONE,
            (mPager.getCurrentItem() == mPagerAdapter.getCount() - 1)
                    ? R.string.action_finish
                    : R.string.action_next);
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // Navigate "up" the demo structure to the launchpad activity.
            // See http://developer.android.com/design/patterns/navigation.html for more.
            NavUtils.navigateUpTo(this, new Intent(this, MainActivity.class));
            return true;

        case R.id.action_previous:
            // Go to the previous step in the wizard. If there is no previous step,
            // setCurrentItem will do nothing.
            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
            return true;

        case R.id.action_next:
            // Advance to the next step in the wizard. If there is no next step, setCurrentItem
            // will do nothing.
            mPager.setCurrentItem(mPager.getCurrentItem() + 1);
            return true;
    }

    return super.onOptionsItemSelected(item);
}


     private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
      public ScreenSlidePagerAdapter(FragmentManager fm) {
         super(fm);
     }

 public Fragment getItem(int position) {
        return ScreenSlidePageFragment.create(position);
    }


    public int getCount() {
        return NUM_PAGES;
    }
}
    }

I am building the project in android 4.2.

EDIT:I have changed the code into

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
    public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) {
        super(fm);
    }

and

 @Override
    public android.support.v4.app.Fragment getItem(int position) {
        return Firstframe.create(position);
    }

then there is an error occuring in

mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager());

Error :The constructor MainActivity.ScreenSlidePagerAdapter(FragmentManager) is undefined

Nazik
  • 8,696
  • 27
  • 77
  • 123
user2083175
  • 133
  • 5
  • 18
  • Refer to my answer for full code for V4: [link](http://stackoverflow.com/questions/14111898/the-import-android-support-v13-app-fragmentactivity-cannot-be-resolved) – ennn791 May 06 '14 at 10:41

4 Answers4

12

Instead of this:

mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager());

Do this:

mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());

because

getFragmentManager() goes with import android.app.FragmentManager

and

getSupportFragmentManager() goes with android.support.v4.app.FragmentManager

AJ Macdonald
  • 436
  • 2
  • 5
  • I have updated library but still same error coming...minSDK verison = 18..any suggestion. – CoDe Nov 18 '14 at 12:37
2

Change your FragmentManager as android.support.v4.app.FragmentManager. import the

android.support.v4.app.FragmentStatePagerAdapter; Following code for ScreenSlideActivity.java :

public class ScreenSlideActivity extends FragmentActivity {

private static final int NUM_PAGES = 5;

private ViewPager mPager;


private PagerAdapter mPagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_screen_slide);

    // Instantiate a ViewPager and a PagerAdapter.
    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mPagerAdapter);
    mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {

            invalidateOptionsMenu();
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.activity_screen_slide, menu);

    menu.findItem(R.id.action_previous).setEnabled(mPager.getCurrentItem() > 0);


    MenuItem item = menu.add(Menu.NONE, R.id.action_next, Menu.NONE,
            (mPager.getCurrentItem() == mPagerAdapter.getCount() - 1)
                    ? R.string.action_finish
                    : R.string.action_next);
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:

            NavUtils.navigateUpTo(this, new Intent(this, MainActivity.class));
            return true;

        case R.id.action_previous:

            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
            return true;

        case R.id.action_next:

            mPager.setCurrentItem(mPager.getCurrentItem() + 1);
            return true;
    }

    return super.onOptionsItemSelected(item);
}


private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
    public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) {
        super(fm);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
        return ScreenSlidePageFragment.create(position);
    }

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

Following code for ScreenSlidePageFragment.java :

public class ScreenSlidePageFragment extends Fragment {

public static final String ARG_PAGE = "page";


private int mPageNumber;


public static android.support.v4.app.Fragment create(int pageNumber) {
    android.support.v4.app.Fragment fragment = new android.support.v4.app.Fragment();
    Bundle args = new Bundle();
    args.putInt(ARG_PAGE, pageNumber);
    fragment.setArguments(args);
    return fragment;
}

public ScreenSlidePageFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mPageNumber = getArguments().getInt(ARG_PAGE);
}

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

    ViewGroup rootView = (ViewGroup) inflater
            .inflate(R.layout.fragment_screen_slide_page, container, false);

    // Set the title view to show the page number.
    ((TextView) rootView.findViewById(android.R.id.text1)).setText(
            getString(R.string.title_template_step, mPageNumber + 1));

    return rootView;
}



public int getPageNumber() {
    return mPageNumber;
}}
elamathy
  • 57
  • 1
  • 4
0

As I see through you code, I see a incompatibility the FragmentManager class in your constructor and the one you have imported in your code import android.app.FragmentManager and android.support.v4.app.FragmentManager

Just check which FragmentManager class you really want to use in this case and your problem should be resolved. Thanks.

i.e.. Choose based on your decision :

public ScreenSlidePagerAdapter(android.app.FragmentManager fm) {
        super(fm);
    }

or

public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) {
        super(fm);
    }

and use the proper class to import in your MainActivity class.

LPD
  • 2,833
  • 2
  • 29
  • 48
0
  #For Full code

package com.team.test;

    import android.content.Intent;
    import android.content.pm.ActivityInfo;
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentStatePagerAdapter;
    import android.support.v4.app.NavUtils;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.view.Menu;
    import android.view.MenuItem;

    /**
     * Demonstrates a "screen-slide" animation using a {@link ViewPager}. Because
     * {@link ViewPager} automatically plays such an animation when calling
     * {@link ViewPager#setCurrentItem(int)}, there isn't any animation-specific
     * code in this sample.
     * 
     * <p>
     * This sample shows a "next" button that advances the user to the next step in
     * a wizard, animating the current screen out (to the left) and the next screen
     * in (from the right). The reverse animation is played when the user presses
     * the "previous" button.
     * </p>
     * 
     * @see ScreenSlidePageFragment
     */
    public class MenuActivity extends FragmentActivity {
        /**
         * The number of pages (wizard steps) to show in this demo.
         */
        private static final int NUM_PAGES = 6;

        /**
         * The pager widget, which handles animation and allows swiping horizontally
         * to access previous and next wizard steps.
         */
        private ViewPager mPager;

        /**
         * The pager adapter, which provides the pages to the view pager widget.
         */
        private PagerAdapter mPagerAdapter;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            setContentView(R.layout.activity_screen_slide);

            // Instantiate a ViewPager and a PagerAdapter.
            mPager = (ViewPager) findViewById(R.id.pager);
            mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
            mPager.setAdapter(mPagerAdapter);
            mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    // When changing pages, reset the action bar actions since they
                    // are dependent
                    // on which page is currently active. An alternative approach is
                    // to have each
                    // fragment expose actions itself (rather than the activity
                    // exposing actions),
                    // but for simplicity, the activity provides the actions in this
                    // sample.
                    invalidateOptionsMenu();
                }
            });
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            super.onCreateOptionsMenu(menu);
            getMenuInflater().inflate(R.menu.activity_screen_slide, menu);

            menu.findItem(R.id.action_previous).setEnabled(
                    mPager.getCurrentItem() > 0);

            // Add either a "next" or "finish" button to the action bar, depending
            // on which page
            // is currently selected.
            MenuItem item = menu
                    .add(Menu.NONE,
                            R.id.action_next,
                            Menu.NONE,
                            (mPager.getCurrentItem() == mPagerAdapter.getCount() - 1) ? R.string.action_finish
                                    : R.string.action_next);
            item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM
                    | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case android.R.id.home:
                // Navigate "up" the demo structure to the launchpad activity.
                // See http://developer.android.com/design/patterns/navigation.html
                // for more.
                NavUtils.navigateUpTo(this, new Intent(this, Login.class));
                return true;

            case R.id.action_previous:
                // Go to the previous step in the wizard. If there is no previous
                // step,
                // setCurrentItem will do nothing.
                mPager.setCurrentItem(mPager.getCurrentItem() - 1);
                return true;

            case R.id.action_next:
                // Advance to the next step in the wizard. If there is no next step,
                // setCurrentItem
                // will do nothing.
                mPager.setCurrentItem(mPager.getCurrentItem() + 1);
                return true;
            }

            return super.onOptionsItemSelected(item);
        }

        /**
         * A simple pager adapter that represents 5 {@link ScreenSlidePageFragment}
         * objects, in sequence.
         */
        public class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
            public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) {
                super(fm);
            }

            @Override
            public android.support.v4.app.Fragment getItem(int position) {
                return ScreenSlidePageFragment.create(position);
            }

            @Override
            public int getCount() {
                return NUM_PAGES;
            }
        }
    }
ennn791
  • 101
  • 1
  • 3