-1

J'ai un viewpager, il a 4 fragments et tous ont un recyclerview. Au clic de recyclage, les quatre fragments ouvrent la même activité, c'est-à-dire DemoActivity. Je veux montrer le menu des options différentes dans DemoActivity selon lequel le recyclerview de fragmnet a été cliqué. Comment se fait-il que je connaisse le clic sur le recyclerview du fragment et montre le menu Oprtions approprié dans DemoActivity?Quel Fragment a ouvert l'activité?

public class CategoryAdapter extends FragmentPagerAdapter { 
    private Context context; 
    public CategoryAdapter(Context context,FragmentManager fm) { 
     super(fm); 
     this.context=context; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     if(position==0){ 
      return new MyMoviesFragment(); 
     } 
     else if(position==1){ 
      return new PopularFragment(); 
     } 
     else if (position==2){ 
      return new UpComingFragment(); 
     } 
     else{ 
      return new NowPlayingFragment(); 
     } 

    } 



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

    @Override 
    public CharSequence getPageTitle(int position) { 
     if(position==0){ 
      return context.getString(R.string.category_MyMovies); 
     } 
     else if(position==1){ 
      return context.getString(R.string.category_Popular); 
     } 

     else if(position==2){ 
      return context.getString(R.string.category_Upcoming); 
     } 
     else if(position==3){ 
      return context.getString(R.string.category_NowPlaying); 
     } 

     return super.getPageTitle(position); 
    } 
} 

Question a été modifié

+0

Vous pouvez transmettre une valeur par l'intention. pouvez-vous s'il vous plaît partager le code? –

+0

le code est très long – baby

+0

Vous ne savez pas si cela fonctionnera avec Fragments mais essayez 'referrer.getHost()' –

Répondre

0
in fragment (u can put this code inside your recycler view action listener) 
Intent intent = new Intent(getActivity(), DemoActivity.class); 
intent.putExtra("KEY", "UR_FRAGMENT_NAME"); 
startActivity(intent); 

in DemoActivity inside onCreate() method 
Intent intent = getIntent(); 
if(intent.hasExtra("KEY")) { 
    if(intent.getStringExtra("KEY").equals("UR_FRAGMENT_NAME")) { 
    // todo what u want. 
    } 
} 
+0

mais l'événement click est géré dans la classe Adaapter et tous les quatre fragments ont la même classe d'adaptateur – baby

+0

simplement passer l'instance sur le fragment actuel à l'intérieur de l'adaptateur ur tout en créant un constructeur. UrAdapter adapter = new UrAdapter (Fragment fragment); –

+0

Mais dans mon constructeur de l'adaptateur, je passe Context qui est de l'activité et tous les fragments partagent le MainActivity – baby

0

Si vous avez un ViewPager - il y a une option de la position que vous pouvez utiliser. Passez la position de votre fragment et mettez l'état des positions dans votre DemoActivity.java.

Pour ce faire, vous devez passer la position de votre méthode de getItem(int position) de FragmentPagerAdpater, et passer de la position Fragment à un Activity.

Tout comme -

@Override 
public Fragment getItem(int position) { 
    Fragment mF; 
    if (position == 0) { 
     mF = new MyMoviesFragment(); 
    } else if (position==1){ 
     mF = new PopularFragment(); 
    } else if (position==2){ 
     mF = new UpComingFragment(); 
    } else { 
     mF = new NowPlayingFragment(); 
    } 
    Bundle b = new Bundle(); 
    b.putInt("KEY", position); // You are passing position to fragment 
    mF.setArguments(b); 
    return mF; 
} 

maintenant obtenir la position dans votre fragment en utilisant la méthode . Pour un exemple, dans votre MyMoviesFragment -

Bundle b = getArguements(); 
int position = b.getInt("KEY"); 

Vous avez votre position dans Fragment, passez maintenant à la Activity à l'intérieur du clic de recyclerview article -

Intent i = new Intent(context, DemoActivity.class); 
i.putExtra("NEW_KEY", position); // position is being passed to activity, retrieve in Activity using getExtras() and use it as needed. 
startActivity(i); 

Vous avez terminé!

+0

Pouvez-vous s'il vous plaît me dire comment mettre la condition des positions dans votre DemoActivity.java. – baby

+0

Très bien, dites-moi d'abord - avez-vous une position dans «Fragment»? Si oui, êtes-vous en mesure d'obtenir et l'événement de l'article 'recycleview' cliquez? – Wizard

+0

oui j'ai position dans Fragment mais comment le récupérer.public class CategoryAdapter extends FragmentPagerAdapter { private Context context; public CategoryAdapter (contexte de contexte, FragmentManager fm) { super (fm); this.context = contexte; } @Override publique Fragment getItem (int position) { si (position == 0) {return new MyMoviesFragment(); } sinon if (position == 1) { Renvoyer new PopularFragment()} else if (position == 2) {return new UpComingFragment(); } else {return new NowPlayingFragment();}} .............} – baby