7

द्वारा एक टुकड़े में भेजें, मेरे पास एक व्यूअर गतिविधि है जो स्लाइड लेआउट का प्रतिनिधित्व करने वाले टुकड़े को कॉल करती है।व्यूपागर गतिविधि से मूल्यों को बंडल

मुझे जो चाहिए वह गतिविधि से मूल्यों को बंडल द्वारा विभाजित करने के लिए पास है। मैं यह कैसे कर सकता हूं? मैं एक पूर्णांक 2 onCreate में पारित करने की कोशिश(), लेकिन काम नहीं और मैं

गतिविधि:

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

}

टुकड़ा:

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

है आप टुकड़ा आईडी और द्वारा उपयोग करते हुए अपनी मूल गतिविधि के लिए टुकड़ा वस्तु हो रही के साथ प्रयास करें फिर fragmentobject.side = गतिविधि.side – KDeogharkar

उत्तर

18

आप setArguments के माध्यम से अपने बंडल स्थापित करने के लिए() विधि, इरादा नहीं। यदि आपके पास व्यूपेजर है, तो आप अपने तर्क को पेजर एडाप्टर पर पास कर सकते हैं, और जब Fragment को तत्काल किया जा रहा है तो तर्क सेट करें।

मुझे नहीं पता कि आपकी साइड की गणना कैसे की जाती है और इसका क्या अर्थ है, इसलिए मैं सामान्य विचार दिखाता हूं।

@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

@ सुशील कई तरीके हैं। आप अपनी गतिविधि को इंटरफ़ेस को कार्यान्वित कर सकते हैं, उदाहरण के लिए 'इंटरफ़ेस वैल्यू रिसीवर {शून्य सेट वैल्यू (टी मान);}' और फ्रैगमेंट से, 'सक्रिय करें a = getActivity(); अगर (वैल्यू रिसीवर का एक उदाहरण) ((वैल्यू रिसीवर) ए) .setValue (v); 'या' org.greenrobot.EventBus', या 'पर्यवेक्षक' पैटर्न का उपयोग करें। या यहां तक ​​कि 'ब्रॉडकास्ट रिसीवर' और 'लोकल ब्रॉडकास्ट प्रबंधक' लेकिन यह सबसे खराब तरीका है। –

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