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와에 의해 사용 부모 활동에 조각 개체를 받고으로 시도 그런 다음 fragmentobject.side = activity.side와 같은 활동에서 단편에 정의 된 변수를 설정하십시오. – KDeogharkar

답변

18

() 메소드가 아니라 인 텐트. ViewPager가있는 경우 인수를 PagerAdapter에 전달하고 Fragment가 인스턴스화 될 때 인수를 설정할 수 있습니다.

사이드가 계산되는 방식과 의미가 무엇인지 알 수 없으므로 일반적인 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를 구현할 수 있습니다. 예를 들어'interface ValueReceiver {void setValue (T value);}'와 Fragment에서 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"); 
관련 문제