简体   繁体   中英

View Pager Android

I'm trying to implement a View Pager from : http://developer.android.com/training/animation/screen-slide.html

But I seem to have a problem when it comes to creating the page number. When debugging the downloaded zip from the previous mentioned website, first method called is create(int pageNumber) and afterwards onCreate() where you're getting the page number. In my case, it's the other way around, therefore I get a null pointer exception.

Here is my current implementation of the View Pager:

public class SingleCheckInDisplay extends android.support.v4.app.Fragment {
    private Checkin data;
    private FragmentManager fragmentManager;

    private List<CheckinUser> enlooped;
    private TextView checkInLocation;
    private TextView checkInDescription;
    private TextView checkInTime;
    private Button cancelBtn;
    private ImageButton singleCheckInEnloopBtn;
    private ImageButton singleCheckInCancelBtn;
    private HorizontalListView enloopedFriends;
    public static final String ARG_PAGE = "page";
    private int mPageNumber;


    public static SingleCheckInDisplay create(int pageNumber) {
        SingleCheckInDisplay fragment = new SingleCheckInDisplay();
        Bundle args = new Bundle();
        args.putInt(ARG_PAGE, pageNumber);
        fragment.setArguments(args);
        return fragment;
    }

    public SingleCheckInDisplay(Checkin data) {
        this.data = data;
    }

    public SingleCheckInDisplay() {
    }

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_single_check_in_display, container, false);
        enlooped = data.getCheckinUsers();

        fragmentManager = getActivity().getSupportFragmentManager();

        ImageView main_pic = (ImageView) v.findViewById(R.id.main_pic);
        checkInLocation = (TextView) v.findViewById(R.id.single_check_in_location);
        checkInDescription = (TextView) v.findViewById(R.id.single_check_in_desc);
        checkInTime = (TextView) v.findViewById(R.id.single_check_in_time_text);
        checkInTime.setText(data.getCheckinDate().toString());
        enloopedFriends = (HorizontalListView) v.findViewById(R.id.sinlge_check_in_enlooped_list);

        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.sm_profile)
                .showImageForEmptyUri(R.drawable.sm_profile)
                .showImageOnFail(R.drawable.sm_profile)
                .cacheOnDisk(true)
                .cacheInMemory(true)
                .imageScaleType(ImageScaleType.EXACTLY)
                .considerExifParams(true)
                .displayer(new SimpleBitmapDisplayer())
                .build();
        ImageLoader.getInstance().displayImage(data.getImages(), main_pic, options);

        checkInDescription.setText(data.getDescription());
        checkInLocation.setText(data.getPlaceAddressAndName());
        checkInLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // Set a bundle with place ID, the rest will be obtained by calling Graph API
                Bundle args = new Bundle();
                args.putString("placeID", data.getPlaceId());

                SingleCheckInPlace scp = new SingleCheckInPlace();
                scp.setArguments(args);
                FragmentManager fm = getActivity().getSupportFragmentManager();
                fm.beginTransaction().replace(R.id.container, scp).addToBackStack(null).commit();
            }
        });

        SingleCheckInAdapter adapter = new SingleCheckInAdapter(getActivity(), enlooped);
        enloopedFriends.setAdapter(adapter);

        cancelBtn = (Button) v.findViewById(R.id.single_ck_display_cancel_button);
        cancelBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MapsFilterFragment firstFragment = new MapsFilterFragment();
                fragmentManager.beginTransaction().add(R.id.container, firstFragment).commit();
            }
        });

        singleCheckInEnloopBtn = (ImageButton) v.findViewById(R.id.single_check_in_enloop_btn);
        singleCheckInEnloopBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(), "Enlooped !", Toast.LENGTH_SHORT).show();
                fragmentManager.popBackStack();
            }
        });

        singleCheckInCancelBtn = (ImageButton) v.findViewById(R.id.single_check_in_no_btn);
        singleCheckInCancelBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(), "Maybe next time", Toast.LENGTH_SHORT).show();
                goBack();
            }
        });
        return v;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

    private void goBack() {
        fragmentManager.popBackStack();
    }

    public int getPageNumber() {
        return mPageNumber;
    }
}

And here is the miplementation of the Pager itself:

public class ScreenSlideFragment extends android.support.v4.app.Fragment {

    private ViewPager mPager;
    private PagerAdapter mPagerAdapter;
    private static final int NUM_PAGES = 11;

    public ScreenSlideFragment() {
        // Required empty public constructor
    }

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

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_screen_slide, container, false);

        mPager = (ViewPager) view.findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager());
        mPager.setAdapter(mPagerAdapter);

        return view;
    }

    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 SingleCheckInDisplay.create(position);
        }

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

}

DO like this

ViewPager mviewPager=(ViewPage)findViewById(R.id.urcontainer);
mviewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override 
    public void OnPageSelected(int position) {
      int page_number=position; //this will give u the current page number    
   }
});

`

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM