Search code examples
javaandroidandroid-fragmentsadapterfragmentpageradapter

How to start fragment from PagerAdapter


I want to start Fragment in my custom pager adapter. However, I do not know how to get the getSupportFragmentManager() to begin the transaction.

Thank you very much for your time and assistance in this matter.

This is my code, custom adapter for Pager:

public static class SlideShowAdapter extends PagerAdapter {


    private ArrayList<Movie> popularMovieList;
    private LayoutInflater inflater;
    private Context context;

    public SlideShowAdapter(Context context, ArrayList<Movie> popularMovieList) {
        this.context = context;
        this.popularMovieList =popularMovieList;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

    @Override
    public int getCount()
    {
        return popularMovieList.size();
    }

    @Override
    public Object instantiateItem(ViewGroup view, final int position) {
        View myImageLayout = inflater.inflate(R.layout.slide, view, false);
        ImageView myImage = (ImageView) myImageLayout
                .findViewById(R.id.slideShowImg);
        Picasso.with(context).load(popularMovieList.get(position).getImage()).into(myImage);
        view.addView(myImageLayout, 0);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MovieFragment movieFragment = MovieFragment
                        .newInstance(popularMovieList.get(position),popularMovieList.get(position).getGenre());
                /***These code below does not work*/
                getActivity().getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fragArea,movieFragment)
                        .addToBackStack(null)
                        .commit();
            }
        });
        return myImageLayout;
    }

Solution

  • If you want to use FragmentManager in SlideShowAdapter:

    • One approach is to pass its instance to SlideShowAdapter constructor
    • Another one is to pass your Activity as FragmentActivity or AppCompatActivity (Activity class does not have getSupportFragmentManager() method) to its constructor and then do myActivity.getSupportFragmentManager().