एक तरीका मुझे पता है कि गतिविधि के माध्यम से है। हम खंड से गतिविधि और गतिविधि को खंड में भेज सकते हैं क्या कोई अन्य तरीका है।मैं डेटा को एक टुकड़े से दूसरे खंड में कैसे स्थानांतरित कर सकता हूं एंड्रॉइड
उत्तर
डॉक्स
से हवाला देते हुए अक्सर आप एक टुकड़ा, दूसरे के साथ संवाद करने के लिए उदाहरण के लिए एक उपयोगकर्ता घटना के आधार पर सामग्री को बदलने के लिए के लिए चाहते हैं। सभी फ्रैगमेंट-टू-फ्रैगमेंट संचार संबंधित गतिविधि के माध्यम से किया जाता है। दो टुकड़े सीधे संवाद नहीं करना चाहिए।
मैं तुम्हें डॉक्स में विधि का पालन करें और मैं नीचे दिए गए लिंक में प्रयास नहीं किया है किसी भी अन्य विकल्प
अधिक जानकारी और उदाहरण डॉक्स chekc लिए
http://developer.android.com/training/basics/fragments/communicating.html
क्या होगा यदि मैं 'setRetainInstance (true)' का उपयोग कर रहा हूं? क्या इसे अभी भी गतिविधि को पास करने की आवश्यकता है? – Zyoo
हां। दस्तावेज़ों की जांच करें http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean) – Raghunandan
पास करने के लिए सुझाव है एक टुकड़े से दूसरे Bundle
में डेटा मदद करेगा।
LifeShapeDetailsFragment fragment = new LifeShapeDetailsFragment(); // object of next fragment
Bundle bundle = new Bundle();
bundle.putInt("position", id);
fragment.setArguments(bundle);
फिर push/call next Fragments.
और अगले टुकड़ा करने के लिए कोड:
Bundle bundle = this.getArguments();
int myInt = bundle.getInt("position", 0);
मूल एंड्रॉइड डेवलपर्स दस्तावेज़ के अनुसार, यह दृष्टिकोण गलत है। हमें दो टुकड़ों के बीच संवाद करने के लिए गतिविधि का उपयोग करना चाहिए। यहां लिंक है: http://developer.android.com/intl/vi/training/basics/fragments/communicating.html – salih
टुकड़े गतिविधियों का उपयोग कर के रूप में उनके बिचौलियों एक आम सबसे अच्छा अभ्यास है जब टुकड़े का उपयोग करके एक दूसरे के साथ संवाद करने के लिए अनुमति दे। इस महत्वपूर्ण पैटर्न पर अधिक जानकारी के लिए http://developer.android.com/guide/components/fragments.html पर जाएं। किसी भी समय आपको किसी अन्य टुकड़े के साथ बातचीत करने की आवश्यकता होती है, आपको हमेशा के बजाय टुकड़े की गतिविधि में एक विधि का उपयोग सीधे अन्य टुकड़े तक पहुंचाना चाहिए। एकमात्र समय एक दूसरे से एक टुकड़े तक पहुंचने के लिए समझ में आता है जब आप जानते हैं कि आपको किसी अन्य गतिविधि में अपने टुकड़े का पुन: उपयोग करने की आवश्यकता नहीं होगी। आपको हमेशा यह मानते हुए टुकड़े लिखना चाहिए कि आप उन्हें एक दूसरे के लिए हार्ड कोड के बजाय उनका पुन: उपयोग करेंगे।
मैं व्यवहार्य विचार करूँगा दो विधियों के होते हैं:
अपने मालिक गतिविधि और कि, स्वामित्व वाली गतिविधि के माध्यम से अन्य टुकड़े के लिए तत्पर संदेशों के साथ एक .Communicate, उस पर विवरण वह आधिकारिक एंड्रॉयड यहाँ प्रलेखन पूर्णांक पाया जा सकता है :
http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity
उद्धरण:
कुछ मामलों में, आपको गतिविधि के साथ ईवेंट साझा करने के लिए एक टुकड़े की आवश्यकता हो सकती है। ऐसा करने का एक अच्छा तरीका खंड के अंदर कॉलबैक इंटरफ़ेस को परिभाषित करना है और यह आवश्यक है कि मेजबान गतिविधि इसे कार्यान्वित करे। जब गतिविधि को इंटरफ़ेस के माध्यम से कॉलबैक प्राप्त होता है, तो यह आवश्यकतानुसार लेआउट में अन्य टुकड़ों के साथ जानकारी साझा कर सकता है।
संचार इंटरफेस कुछ इस तरह दिखाई दे सकता है:
public interface IActionListener{
//You can also add parameters to pass along etc
public void doSomething();
}
टुकड़ा कुछ इस तरह दिखेगा:
public class MyFragment extends Fragment{
private WeakReference<IActionListener> actionCallback;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
actionCallback = new WeakReference<IActionListener>((IActionListener) activity);
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement IActionListener.");
}
}
}
मैं एक WeakReference यहाँ उपयोग कर रहा हूँ लेकिन वह वास्तव में आप पर निर्भर है। अब आप स्वामित्व गतिविधि के साथ संवाद करने के लिए actionCallback का उपयोग कर सकते हैं और IActionListener में परिभाषित विधियों को कॉल कर सकते हैं।
, स्वामित्व वाली गतिविधि इस प्रकार दिखाई देगा:
public class MyActivity extends ActionBarActivity implements IActionListener {
public void doSomething(){ //Here you can forward information to other fragments }
}
बी। अब दूसरी विधि के लिए - आप टुकड़े सीधे इंटरफेस का उपयोग करके एक-दूसरे के साथ संवाद कर सकते हैं - इस तरह आपको उस टुकड़े की सटीक कक्षा को जानने की आवश्यकता नहीं है जिसे आप बात कर रहे हैं, जो ढीले युग्मन सुनिश्चित करता है।
सेटअप निम्नानुसार है: आपके पास दो टुकड़े (या अधिक) और एक गतिविधि (दूसरा खंड शुरू करने के लिए) है। हमारे पास एक इंटरफ़ेस है जो फ्रैगमेंट 2 को अपना कार्य पूरा करने के बाद फ्रैगमेंट 1 को प्रतिक्रिया देता है।
public class FragmentOne extends Fragment implements IActionListener {
public void doSomething() {//The response from Fragment 2 will be processed here}
}
विधि ए टुकड़ा 1 में वर्णित पूछता है इसे करने के लिए गतिविधि के मालिक है का उपयोग करना: सरलता के लिए हम सिर्फ इंटरफेस मैं ए
यहाँ में परिभाषित का फिर से उपयोग हमारे टुकड़ा 1 है फ्रैगमेंट 2 शुरू करें। हालांकि, गतिविधि फ्रैगमेंट 1 के साथ फ्रैगमेंट 2 के लिए एक तर्क के रूप में गुजर जाएगी, इसलिए फ्रैगमेंट 2 बाद में अप्रत्यक्ष रूप से फ्रैगमेंट 1 तक पहुंच सकता है और उत्तर भेज सकता है। आइए देखें कि गतिविधि preps टुकड़ा 2 पर नजर डालते हैं:
public class MyActivity extends ActionBarActivity {
// The number is pretty random, we just need a request code to identify our request later
public final int REQUEST_CODE = 10;
//We use this to identify a fragment by tag
public final String FRAGMENT_TAG = "MyFragmentTag";
@Override
public void onStartFragmentTwo() {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
// The requesting fragment (you must have originally added Fragment 1 using
//this Tag !)
Fragment requester = manager.findFragmentByTag(FRAGMENT_TAG);
// Prepare the target fragment
Fragment target = new FragmentTwo();
//Here we set the Fragment 1 as the target fragment of Fragment 2's
//communication endeavors
target.getSelf().setTargetFragment(requester, REQUEST_CODE);
// Hide the requesting fragment, so we can go fullscreen on the target
transaction.hide(requester);
transaction.add(R.id.fragment_container, target.getSelf(), FRAGMENT_TAG);
transaction.addToBackStack(null);
transaction.commit();
}
}
सुझाव: मैं समर्थन-फ्रेमवर्क का उपयोग कर रहा है, इसलिए यदि आप पूरी तरह से आप बस ActionBarActivity के बजाय FragmentActivity उपयोग कर सकते हैं के लिए> Android 3.0 का विकास।
अब FragmentTwo शुरू कर दिया जा रहा है, के कैसे FragmentTwo FragmentOne के साथ संवाद चाहते हैं पर ध्यान दें:
public class FragmentTwo extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(savedInstanceState != null){
// Restore our target fragment that we previously saved in onSaveInstanceState
setTargetFragment(getActivity().getSupportFragmentManager().getFragment(savedInstanceState, TAG),
MyActivity.REQUEST_CODE);
}
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Retain our callback fragment, the TAG is just a key by which we later access the fragment
getActivity().getSupportFragmentManager().putFragment(outState, TAG, getTargetFragment());
}
public void onSave(){
//This gets called, when the fragment has done all its work and is ready to send the reply to Fragment 1
IActionListener callback = (IActionListener) getTargetFragment();
callback.doSomething();
}
}
अब() DoSomething के कार्यान्वयन टुकड़ा 1 में बुलाया जाएगा।
मुझे लगता है कि आपके पहले कोड अंश में कोड त्रुटि है। आप अपने वीक रेफरेंस "एक्शनलिस्टर" को एक बिंदु पर और "एक्शनकॉलबैक" पर कॉल करते हैं। क्या आप इसे जांच सकते हैं? –
@ पार्थशाह ओह धन्यवाद! इसे मेरे सिर के ऊपर से लिखा और चर नामों को दोबारा जांचने में असफल रहा - धन्यवाद, मैंने इसे – AgentKnopf
को सही किया है, फिर भी, जवाब बहुत अच्छे उदाहरणों के साथ उत्कृष्ट है! अच्छा काम! –
यहाँ, समाधान है नीचे दिए गए चरणों
का पालन करें:
1 इस इंटरफेस
for.e.g
public class OrderDetail extends ActionBarActivity implements TitleChangeListener
3 का उपयोग कर अपने गतिविधि 2.implements कि
की तरह इंटरफ़ेस बनाने इस गतिविधि मेंUpdateTitle()
012 पर बना है public void onUpdateTitle(String title)
{
//here orderCompletedDetail is the object second fragment name ,In which fragement I want send data.
orderCompletedDetail.setTitle(title);
}
4. अब, टुकड़े में एक कोड कुछ लिखें।
public class OrderPendingDetail extends Fragment
{
private View rootView;
private Context context;
private OrderDetail orderDetail;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
rootView = inflater.inflate(R.layout.order_pending_detail, container, false);
context = rootView.getContext();
//here OrderDetail is the name of ActionBarActivity
orderDetail = (OrderDetail) context;
//here pass some text to second Fragment using button ClickListener
but_updateOrder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
// here call to Activity onUpdateTitle()
orderDetail.onUpdateTitle("bridal");
}
});
return rootView;
}
}
5.Write दूसरा टुकड़ा setTitle में कुछ कोड()
public void setTitle(String title)
{
TextView orderCompeted_name=(TextView)rootView.findViewById(R.id.textView_orderCompeted_name);
orderCompeted_name.setText(title);
//here you see the "bridal" value for TextView
}
इस समाधान जब आप टुकड़ा है कि एक बार यह दूसरा टुकड़ा में मूल्य से पता चलता का बटन पर क्लिक करें। मुझे आशा है कि यह आपके लिए सहायक होगा .. !!
- 1. डेटा को एक गतिविधि से दूसरे में कैसे स्थानांतरित करें?
- 2. एक अलग कंटेनर में एंड्रॉइड खंड को स्थानांतरित करें
- 3. टुकड़े एक दूसरे को
- 4. मानचित्र खंड से दूसरे टुकड़े में स्विचिंग और पीछे
- 5. कुछ डेटा को किसी अन्य टुकड़े में कैसे स्थानांतरित करें?
- 6. मैं डेटा को सीधे एक Google क्लाउड स्टोरेज प्रोजेक्ट से दूसरे स्थान पर कैसे स्थानांतरित कर सकता हूं?
- 7. मैं विभिन्न टुकड़ों में एक एंड्रॉइड खंड उदाहरण का पुन: उपयोग कैसे कर सकता हूं?
- 8. मैं एक ही आईओएस डिवाइस में फ़ाइलों को एक एप्लिकेशन से दूसरे में कैसे स्थानांतरित कर सकता हूं?
- 9. गतिविधि के माध्यम से एक टुकड़े से दूसरे में एक डेटा से दूसरे डेटा को स्थानांतरित करने के लिए कैसे करें
- 10. मैं असेंबली में एक छवि कैसे स्थानांतरित कर सकता हूं?
- 11. मैं एक टुकड़े से एक सेवा कैसे बांध सकता हूं
- 12. पहले खंड में श्रोता का उपयोग करके एक टुकड़े को एक और टुकड़े से कैसे बदलें
- 13. मैं एक एचबीएएस उदाहरण से कैसे पढ़ सकता हूं लेकिन दूसरे को लिख सकता हूं?
- 14. मैं jQuery में FullCalendar को कैसे स्थानांतरित कर सकता हूं?
- 15. टुकड़े से कॉल खंड
- 16. मैं अपने दूसरे 2 आईओएस ऐप डेटाबेस को एक-दूसरे से कैसे प्राप्त कर सकता हूं
- 17. कमांड लाइन का उपयोग करके मैं सभी फ़ाइलों को एक फ़ोल्डर से दूसरे फ़ोल्डर में कैसे स्थानांतरित कर सकता हूं?
- 18. मैं रेलवे में एक नियंत्रक से वस्तुओं को दूसरे में कैसे पास कर सकता हूं?
- 19. मैं UIImagePickerController को कैसे स्थानांतरित कर सकता हूं
- 20. मैं डेटा संरचना के विभिन्न हिस्सों को एक दूसरे के बाद कैसे पार कर सकता हूं?
- 21. मैं तारों के स्वामित्व को कैसे स्थानांतरित कर सकता हूं?
- 22. मैं UITextField में स्पष्ट बटन कैसे स्थानांतरित कर सकता हूं?
- 23. एक मेमकैड सर्वर से दूसरे स्थान पर डेटा स्थानांतरित करें
- 24. क्या मैं अपने विंडोज फोन और विंडोज 8 ऐप को एक खाते से दूसरे खाते में स्थानांतरित कर सकता हूं?
- 25. मैं एक्सएमएल से एक टुकड़े के लेआउट को कैसे परिभाषित कर सकता हूं?
- 26. मैं एक पायथन रिहाई से दूसरे में एक कोंडा पर्यावरण कैसे क्लोन कर सकता हूं?
- 27. मैं एक फ़ाइल को एक गैर-खाली निर्देशिका में कैसे स्थानांतरित कर सकता हूं?
- 28. क्या मैं अपने खाते के तहत एक बार एक ऐप को दूसरे खाते में स्थानांतरित कर सकता हूं?
- 29. एंड्रॉइड में गतिशील रूप से एक टुकड़े में देखें?
- 30. एक्सकोड 4 क्या मैं एक मशीन से दूसरे मशीन में डाउनलोड कर सकता हूं
एक इंटरफ़ेस का उपयोग होस्टिंग गतिविधि के साथ संवाद एक तो गतिविधि – Raghunandan
से टुकड़ा टी डेटा स्थानांतरित^नहीं, ऐसा नहीं है .. यह देख .. [http://stackoverflow.com/questions/13733304/ कॉलबैक-टू-ए-फ्रैगमेंट-टू-ए-डायलॉगफैगमेंट] (http://stackoverflow.com/questions/13733304/callback-to-a-fragment-from-a-dialogfragment) – Zyoo
@Zyoo वह क्यों है ?? मेरे संपादन में – Raghunandan