-1

私はビューページャーを持っていますが、それは4つのフラグメントを持ち、すべてにrecyclerviewがあります。リサイクルビューをクリックすると、4つのフラグメントすべてが同じ活動、すなわちDemoActivityを開く。 DemoActivityにfragmnetのリサイクルビューがクリックされたことに応じて別のオプションメニューを表示したい。どうすれば、どのフラグメントのリサイクルビューがクリックされたかを知ることができ、DemoActivityで適切なOprtionsメニューを表示できますか?アクティビティーを開いたのはどの断片ですか?

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

質問は、あなたがViewPagerを得た場合

+0

uはインテントを通じて価値を渡すことができます。 コードを共有してもよろしいですか? –

+0

コードが非常に長い – baby

+0

これがフラグメントでは動作しますが、 'referrer.getHost()'を試しているのかどうかわかりません –

答えて

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

クリックイベントはAdaapterクラスで処理され、4つのフラグメントすべてが同じアダプタクラスを持ちます – baby

+0

コンストラクタの作成中にurアダプタ内の現在のフラグメントにインスタンスを渡すだけです。 UrAdapterアダプタ=新しいUrAdapter(フラグメントフラグメント)。 –

+0

しかし、私のアダプターのコンストラクターで、私はアクティビティーであり、すべてのフラグメントがMainActivityを共有するContextを渡しています – baby

0

を編集されている - あなたが利用できる位置のオプションがあります。あなたのfragmentの位置を渡し、ポジションの状態をDemoActivity.javaに入れてください。

これを行うには、FragmentPagerAdpatergetItem(int position)メソッドからポジションを渡し、FragmentからActivityにポジションを渡す必要があります。

同じように -

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

今方法を使用してfragment内の位置を取得します。たとえば、あなたのMyMoviesFragmentに -

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

あなたは今recyclerview項目のクリック内Activityに渡し、Fragmentで自分の位置を持っている -

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

設定が完了しています!

+0

DemoActivity.javaにポジションの条件を設定する方法を教えてください。 – baby

+0

申し訳ありません、最初に教えてください - あなたは 'Fragment'でポジションを取っていますか?はいの場合は、 'recycleview'アイテムのクリックを取得できますか? – Wizard

+0

はい私はFragmentの位置を持っていますが、it.publicクラスを取得する方法CategoryAdapter extends FragmentPagerAdapter { プライベートコンテキストコンテキスト。 public CategoryAdapter(コンテキストコンテキスト、FragmentManager fm){ super(fm); this.context = context; } @Override公共フラグメントのgetItem(int型位置){ 場合(位置== 0){(新しいMyMoviesFragmentを返す )。 } else if(position == 1){ return new PopularFragment()} else if(position == 2){return new UpComingFragment(); } else {return new NowPlayingFragment();}} .............} – baby