7

私はスライドレイアウトを表すフラグメントを呼び出すViewPagerアクティビティを持っています。ViewPagerアクティビティからバンドルでフラグメントに値を送信

私が必要とするのは、アクティビティの値をバンドルごとにフラグメントに渡すことです。 どうすればいいですか?私はのonCreateのint 2を渡してみてください()は動作しないと私

活動:

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_screen_slide); 
    Intent intent = new Intent(this,ScreenSlidePageFragment.class); 
    Bundle bundle = new Bundle(); 
    bundle.putInt("SIDE",2); 
    intent.putExtras(bundle); 
/** 
* Instantiate a ViewPager and a PagerAdapter 
*/ 

    mPager = (ViewPager)findViewById(R.id.pager); 
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); 
    mPager.setAdapter(mPagerAdapter); 
    mPager.setOnPageChangeListener(new OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int arg0) { 
      if(itemOld > arg0){ 
       auxBack--; 
       SIDE=1; 
      } 
      else if(itemOld < arg0){ 
       auxFront++; 
       SIDE=0; 
      } 
     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onPageScrollStateChanged(int arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
} 

@Override 
public void onBackPressed(){ 
    if(mPager.getCurrentItem()==0){ 
     super.onBackPressed(); 
    }else{ 
     mPager.setCurrentItem(mPager.getCurrentItem()-1); 
    } 
} 


/** 
* A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in sequence 
*/ 

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter{ 
    public ScreenSlidePagerAdapter(FragmentManager fm){ 
     super(fm); 
    } 

    @Override 
    public ScreenSlidePageFragment getItem(int arg0) { 
     return new ScreenSlidePageFragment(); 
    } 

    @Override 
    public int getCount() { 
     //Toast.makeText(getApplicationContext(), "Num pages " + NUM_PAGES, Toast.LENGTH_LONG).show(); 
     return NUM_PAGES; 
    } 
} 

}

フラグメント:あなたはsetArgumentsを通して、あなたのバンドルを設定する必要が

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    int tID = ((ScreenSlidePagerActivity)getActivity()).getIntent().getExtras().getInt("SIDE"); 
    Toast.makeText(getActivity(), "Side selected....." +tID, Toast.LENGTH_LONG).show(); 
+0

あなたはフラグメントIDで使用して、その親アクティビティにフラグメントオブジェクトを取得してみていると、フラグメントの変数defineを、fragmentobject.side = activity.sideのようなアクティビティから設定してください。 – KDeogharkar

答えて

18

()メソッドではなく、意図します。 ViewPagerがある場合は、引数をPagerAdapterに渡して、フラグメントがインスタンス化されているときに引数を設定できます。

あなたのSIDEがどのように計算されるのか、それはどういう意味なのでしょうか?私は一般的なideを表示します。

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_screen_slide); 

    Bundle bundle = new Bundle(); 
    bundle.putInt("SIDE",2); 
/** 
* Instantiate a ViewPager and a PagerAdapter 
*/ 

    mPager = (ViewPager)findViewById(R.id.pager); 
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager(), bundle); 
    mPager.setAdapter(mPagerAdapter); 
} 

/** 
* A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in sequence 
*/ 

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter{ 

    private final Bundle fragmentBundle; 

    public ScreenSlidePagerAdapter(FragmentManager fm, Bundle data){ 
     super(fm); 
     fragmentBundle = data; 
    } 

    @Override 
    public ScreenSlidePageFragment getItem(int arg0) { 
     final ScreenSlidePageFragment f = new ScreenSlidePageFragment(); 
     f.setArguments(this.fragmentBundle); 
     return f; 
    } 

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

断片

@Override 
public void onCreate(Bundle state) { 
    super.onCreate(state); 
    final Bundle args = getArguments(); 
    final int side = args.getInt("SIDE"); 
} 
+0

どうやってその反対ですか?断片から活動への移行? – Susheel

+0

@Susheel多くの方法があります。あなたのアクティビティは、例えば 'interface ValueReceiver {void setValue(T value);}'のようなインタフェースを実装することができ、フラグメントからは 'Activiy a = getActivity(); if(ValueReceiverのインスタンス)(ValueReceiver)a).setValue(v); 'または' org.greenrobot.EventBus'または 'Observer'パターンを使用します。あるいは、 'BroadcastReceiver'と' LocalBroadcastManager'でも、最悪の方法です。 –

+0

すばらしい答え! +1 – CodeSlave

6

これは、あなたが正確に求めている解決策ではないかもしれませんが、それは私が何をすべきかであり、それが誰かを助けることがあります。

があなたのフラグメントにパブリックメソッドを作成します。

public void doSomething(String myValue){ 
    // Do stuff in your fragment with myValue 
} 

アクティビティでは、アダプタからフラグメントを取得します。それはそれはで追加された順番に基づいているフラグメントあなたを知っているあなたの変数(複数可)を渡し、自分のフラグメントの方法を実行します。

// Get FriendsFragment (first fragment) 
MyFragment fragment = (MyFragment) mAdapter.getItem(0); 
fragment.doSomething("some-value"); 
関連する問題