0

Ich möchte Fragment in meinem benutzerdefinierten Pager-Adapter starten. Jedoch weiß ich nicht, wie man die getSupportFragmentManager() erhält, um die Transaktion zu beginnen.So starten Sie das Fragment von PagerAdapter

Vielen Dank für Ihre Zeit und Unterstützung in dieser Angelegenheit.

Dies ist mein Code, kundenspezifische Adapter für 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; 
    } 

Antwort

2

Wenn Sie FragmentManager in SlideShowAdapter verwenden möchten:

  • Ein Ansatz seine Instanz ist SlideShowAdapter Konstruktor übergeben
  • Another eine ist, Ihre Activity als FragmentActivity oder AppCompatActivity zu übergeben (Activity Klasse hat keine getSupportFragmentManager() Methode) t o sein Konstruktor und dann tun Sie myActivity.getSupportFragmentManager().
+0

Ich versuchte den zweiten Ansatz, und es ist richtig. Es ist jedoch nicht zu einem Bruch gegangen, als ich auf den Gegenstand geklickt habe – DonDave

0

Ich habe die Lösung basierend auf @Amin Mousavi Vorschlag.

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