简体   繁体   English

如何从PagerAdapter启动片段

[英]How to start fragment from PagerAdapter

I want to start Fragment in my custom pager adapter. 我想在我的自定义寻呼机适配器中启动Fragment。 However, I do not know how to get the getSupportFragmentManager() to begin the transaction. 但是,我不知道如何获取getSupportFragmentManager()来开始事务。

Thank you very much for your time and assistance in this matter. 非常感谢您的时间和协助。

This is my code, custom adapter for Pager: 这是我的代码,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;
    }

If you want to use FragmentManager in SlideShowAdapter : 如果要在SlideShowAdapter使用FragmentManager

  • One approach is to pass its instance to SlideShowAdapter constructor 一种方法是将其实例传递给SlideShowAdapter构造函数
  • 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() . 另一种方法是将Activity作为FragmentActivityAppCompatActivityActivity类没有getSupportFragmentManager()方法)传递给其构造函数,然后执行myActivity.getSupportFragmentManager()

I got the solution based on @Amin Mousavi suggestion. 我得到了基于@Amin Mousavi建议的解决方案。

public static class SlideShowAdapter extends PagerAdapter {


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

    public SlideShowAdapter(FragmentActivity 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);
        myImage.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*/
                context.getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fragArea,movieFragment)
                        .addToBackStack(null)
                        .commit();

            }
        });
        return myImageLayout;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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