如何从PagerAdapter开始片段

问题描述:

我想在自定义寻呼机适配器中启动Fragment。但是,我不知道如何让getSupportFragmentManager()开始交易。如何从PagerAdapter开始片段

非常感谢您在这件事上的时间和协助。

这是寻呼机我的代码,自定义适配器:

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; 
    } 

如果你想使用FragmentManagerSlideShowAdapter

  • 一种方法是将它的实例传递给SlideShowAdapter构造
  • 另一个一种是通过你的Activity作为FragmentActivityAppCompatActivityActivity类没有getSupportFragmentManager()方法)t o其构造函数,然后执行myActivity.getSupportFragmentManager()
+0

我试过第二种方法,它是正确的。但是,当我点击该项目时,它没有出现碎片 – DonDave

我得到了基于@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; 
    }