दिलचस्प पोस्ट
फ़ाइल डाउनलोड करें और उसे फ़ोल्डर में सहेजें क्यों DEBUG = गलत सेटिंग मेरे django स्थिर फ़ाइलें पहुँच विफल कर देता है? नया आउटलेट कनेक्शन सम्मिलित नहीं किया जा सका खोज आदेश के साथ regex का उपयोग कैसे करें? जावास्क्रिप्ट में बहुआयामी सरणी के सूचकांक को खोजने के लिए एंड्रॉइड वी 21 थीम। ऐप कॉमपेट रंग उच्चारण को नजरअंदाज किया गया है, डायलॉग पर कोई पैडिंग नहीं है NoSQL (मोंगोडीबी) बनाम लुसेन (या सोलर) आपके डेटाबेस के रूप में एनजी-दोहराने और नेस्टेड लूप के साथ पंक्तियां जोड़ना निर्धारित करें कि यदि फ़ंक्शन मौजूद है तो बाश में मैं शेष सभी क्षैतिज स्थान पर इनपुट तत्व कैसे बना सकता हूं? मेरी एसक्यूएल डायनेमिक क्वेरी निष्पादित करती है और आउटपुट को संग्रहीत कार्यविधि में एक वेरिएबल में मिलता है AngularJS वादा करता है, $ q, defer पृष्ठ लोड हो रहा है, जबकि एजीक्स लोड हो रहा है gif एनीमेशन दिखाने के लिए कैसे? कुछ दशमलव स्थान तक एक अस्थायी बिंदु संख्या को कैसे गोल करना है? क्या आईओएस 7 में UITableView कोशिकाओं को विभाजक में एक लाइन ब्रेक नहीं है?

एक टुकड़ा से एक गतिविधि विधि को बुलाओ

एक टुकड़ा से मेरी गतिविधि में एक विधि कॉल करने की कोशिश कर रहा है। मैं टुकड़ा विधि डेटा देने के लिए और विधि वापसी जब डेटा प्राप्त करना चाहता हूँ। मैं स्थिर तरीके से कॉल करने के समान ही प्राप्त करना चाहता हूं, लेकिन स्थिर उपयोग के बिना क्योंकि यह गतिविधि में समस्याएं पैदा करता है।

टुकड़ों के लिए नया तो मुझे एक आसान और शैक्षणिक व्याख्या की आवश्यकता है!

धन्यवाद!

Solutions Collecting From Web of "एक टुकड़ा से एक गतिविधि विधि को बुलाओ"

खंड से सक्रियता तक:

((YourActivityClassName)getActivity()).yourPublicMethod(); 

गतिविधि से टुकड़े तक:

 FragmentManager fm = getSupportFragmentManager(); //if you added fragment via layout xml YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentById(R.id.your_fragment_id); fragment.yourPublicMethod(); 

यदि आपने कोड के माध्यम से टुकड़ा जोड़ लिया है और जब आप अपना टुकड़ा findFragmentByTag इसके बजाय findFragmentByTag उपयोग करें:

 YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag"); 

आपको संभवत: गतिविधि से टुकड़े को छूने की कोशिश करनी चाहिए, अगर आप इसे कहीं और का उपयोग करना चाहते हैं आप यह ऐसा इंटरफ़ेस बनाकर कर सकते हैं, जो आपकी गतिविधि लागू करता है।

तो आप निम्न की तरह एक अंतरफलक परिभाषित करेंगे:

मान लीजिए उदाहरण के लिए आप गतिविधि को स्ट्रिंग देना चाहते हैं और इसे एक पूर्णांक लौटाया है:

 public interface MyStringListener{ public Integer computeSomething(String myString); } 

यह टुकड़ा या एक अलग फ़ाइल में परिभाषित किया जा सकता है

तब आप अपनी गतिविधि को इंटरफ़ेस लागू कर सकते हैं।

 public class MyActivity extends FragmentActivity implements MyStringListener{ @Override public Integer computeSomething(String myString){ /** Do something with the string and return your Integer instead of 0 **/ return 0; } } 

फिर अपने टुकड़े में आपके पास मायस्ट्रिंग लिस्टनर वैरिएबल होगा और आप श्रोता को एचक (गतिविधि गतिविधि) पद्धति में टुकड़े में सेट कर देंगे।

 public class MyFragment { private MyStringListener listener; @Override public void onAttach(Context context) { super.onAttach(context); try { listener = (MyStringListener) context; } catch (ClassCastException castException) { /** The activity does not implement the listener. */ } } } 

संपादित करें (17.12.2015): onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended

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

अद्यतन करने के बाद मैं समझता हूं कि टुकड़े कैसे काम करते हैं प्रत्येक टुकड़ा एक अभिभावक गतिविधि से संबंधित है। तो बस का उपयोग करें:

 getActivity().whatever 

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

============

आपको क्या करना है बाहरी गतिविधि को डालना है

 ((MainActivity) getActivity()).Method(); 

एक नया उदाहरण बनाने के लिए एंड्रॉइड फ्रेम भ्रमित हो जाएगा और यह इसे पहचानने में सक्षम नहीं होगा। यह भी देखें :

https://stackoverflow.com/a/12014834/1984636

https://stackoverflow.com/a/2042829/1984636

हालांकि मैं पूरी तरह से मार्को के उत्तर की तरह सोचता हूं कि यह कहना उचित है कि आप एक ही परिणाम प्राप्त करने के लिए एक प्रकाशित / सदस्यता आधारित फ्रेमवर्क का उपयोग भी कर सकते हैं उदाहरण के लिए यदि आप ईवेंट बस के साथ जाते हैं तो आप निम्न कर सकते हैं

टुकड़ा:

 EventBus.getDefault().post(new DoSomeActionEvent()); 

गतिविधि:

  @Subscribe onSomeActionEventRecieved(DoSomeActionEvent doSomeActionEvent){ //Do something } 

अपने टुकड़े के माध्यम से आपकी गतिविधि में घोषित फ़ंक्शन को एक्सेस करने के लिए कृपया एक इंटरफ़ेस का उपयोग करें, जैसा कि मार्को के उत्तर में दिखाया गया है।

आपकी गतिविधि के माध्यम से आपके टुकड़े में घोषित फ़ंक्शन को एक्सेस करने के लिए आप इसका उपयोग कर सकते हैं यदि आपके पास टैग या आईडी नहीं है

 private void setupViewPager(ViewPager viewPager) { //fragmentOne,fragmentTwo and fragmentThree are all global variables fragmentOne= new FragmentOne(); fragmentTwo= new FragmentTwo(); fragmentThree = new FragmentThree(); viewPagerAdapteradapter = new ViewPagerAdapter(getSupportFragmentManager()); viewPagerAdapteradapter.addFragment(fragmentOne, "Frag1"); viewPagerAdapteradapter.addFragment(fragmentTwo, "Frag2"); viewPagerAdapteradapter.addFragment(fragmentThree, "Frag3"); //viewPager has to be instantiated when you create the activity: //ViewPager viewPager = (ViewPager)findViewById(R.id.pager); //setupViewPager(viewPager); //Where R.id.pager is the id of the viewPager defined in your activity's xml page. viewPager.setAdapter(viewPagerAdapteradapter); //frag1 and frag2 are also global variables frag1 = (FragmentOne)viewPagerAdapteradapter.mFragmentList.get(0); frag2 = (FragmentTwo)viewPagerAdapteradapter.mFragmentList.get(1);; //You can use the variable fragmentOne or frag1 to access functions declared in FragmentOne } 

यह ViewpagerAdapterClass है

  class ViewPagerAdapter extends FragmentPagerAdapter { public final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } 

यह जवाब मेरे जैसे नॉन के लिए है आपका दिन शुभ हो।

यह टुकड़ा वर्ग से है …

 ((KidsStoryDashboard)getActivity()).values(title_txt,bannerImgUrl); 

गतिविधि कक्षा से यह कोड …

  public void values(String title_txts, String bannerImgUrl) { if (!title_txts.isEmpty()) { //Do something to set text } imageLoader.displayImage(bannerImgUrl, htab_header_image, doption); }