-1

Ich habe einen Viewpager, es hat 4 Fragmente und alle haben Recyclerview. Beim Klicken auf recyclerview öffnen alle vier Fragmente die gleiche Aktivität, d. H. DemoActivity. Ich möchte in DemoActivity ein anderes Optionsmenü anzeigen, anhand dessen auf die recycleview von fragmnet geklickt wurde. Warum würde ich wissen, auf welches Fragment der Recyclerview geklickt wurde und in DemoActivity das entsprechende Optionsmenü anzeigen?Welches Fragment hat die Aktivität geöffnet?

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

Frage wurde

bearbeitet
+0

Sie können Wert durch Absicht übergeben. können Sie bitte den Code teilen? –

+0

der Code ist sehr lang – baby

+0

Nicht sicher, ob dies mit Fragmenten funktionieren wird, aber versuchen Sie 'Referrer.getHost()' –

Antwort

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

aber das Click-Ereignis wird in Adaapter-Klasse behandelt und alle vier Fragmente haben die gleiche Adapter-Klasse – baby

+0

übergeben Sie einfach die Instanz auf aktuelle Fragment in Ihrem Adapter während create Konstruktor. UrAdapter-Adapter = neuer UrAdapter (Fragmentfragment); –

+0

Aber in meinem Adapter-Konstruktor übergebe ich Context, der von der Aktivität ist, und alle Fragmente teilen sich die MainActivity – baby

0

Wenn Sie eine ViewPager bekam - es gibt eine Möglichkeit, Position, die Sie nutzen können. Übergeben Sie die Position Ihrer fragment und setzen Sie den Zustand der Positionen in Ihre DemoActivity.java.

so zu tun, müssen Sie Position ‚aus dem FragmentPagerAdpater s getItem(int position) Methode zu übergeben, und die Position von Fragment zu einem Activity passieren.

Genau wie -

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

Jetzt Position erhalten in Ihrem fragment Methode. Ein Beispiel in Ihrem MyMoviesFragment -

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

Sie haben Ihre Position in Fragment, bekam nun an die Activity innerhalb der Klick auf recyclerview Artikel passieren -

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

Sie sind fertig!

+0

Können Sie mir bitte sagen, wie Sie den Zustand von Positionen in Ihre DemoActivity.java setzen können. – baby

+0

In Ordnung, zuerst sagen Sie mir - haben Sie Position in 'Fragment'? Wenn ja, sind Sie in der Lage zu erhalten und Ereignis von 'recycleview' Element klicken? – Wizard

+0

ja ich habe Position in Fragment, aber wie man es zurückbekommt. Public class CategoryAdapter erweitert FragmentPagerAdapter { privater Kontext Kontext; public CategoryAdapter (Kontext Kontext, FragmentManager fm) { super (fm); this.context = Kontext; } @Override public Fragment getItem (int position) { if (Position == 0) { neuen MyMoviesFragment zurückkehren(); } sonst if (position == 1) { gib neues PopularFragment() zurück} else if (position == 2) {return new UpComingFragment(); } else {return new NowPlayingFragment();}} .............} – baby

Verwandte Themen