2016-07-12 9 views
6

मैं एक ऐसी परियोजना में काम कर रहा हूं जिसमें कई टुकड़े हैं। अब मुझे इन टुकड़ों के बीच कुछ डेटा (पूर्णांक, तार, सरणीसूची) साझा करने की आवश्यकता है।उसी गतिविधि में Fragments के बीच डेटा पास करना

पहली बार मैंने स्थिर फ़ील्ड का उपयोग किया लेकिन मुझे लगता है कि यह एक खराब तरीका है तो मुझे this solution मिला।

विकल्प 1:

लेकिन मेरे मामले में क्लिक करने के लिए मैं सिर्फ टुकड़े के बीच नेविगेट करने के लिए कोई बटन नहीं है वहाँ टुकड़े के बीच डाटा साझा करने के लिए किसी भी आसान तरीका

+0

यदि आप किसी भी उपयोगकर्ता-इंटरैक्शन के बिना डेटा देखते हैं (क्लिक करने के लिए कोई बटन नहीं, सूचीदृश्य चयन करने के लिए चयन करें ...)) आपको दृश्य-केवल-खंड से डेटा को किसी अन्य खंड में क्यों पारित करने की आवश्यकता है? पहले खंड में – k3b

+0

मैं कई लक्षण बनाता हूं; दूसरों में समान लक्षणों की आवश्यकता होती है, इसलिए मैं कॉम्पेक्सिटी को कम करने और समय – Soufiane

उत्तर

1

आप कुछ विकल्प हैं है आपको टुकड़ों के बीच साझा जानकारी की आवश्यकता है, आप जानकारी स्टोर करने के लिए साझा किए गए संदर्भों का उपयोग कर सकते हैं। मेरे दृष्टिकोण से, यह एक बुरा विचार है क्योंकि साझा किए गए संदर्भ।

SharedPreferences settings = context.getSharedPreferences("Preferences", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString("string1", var); 
    editor.putBoolean("bool1", var); 
    ... 
    editor.commit(); 

विकल्प 2:: यह एक उदाहरण है कि आप एक टुकड़ा instanciated है, तो आप टुकड़ा एन जानकारी के कुछ राजा स्टोर करने के लिए एक सेट विधि बना सकते हैं। उदाहरण के लिए, यदि आप स्ट्रिंग की सरणी पास करना चाहते हैं, तो आप खंड में एक सरणी बना सकते हैं (सेटर विधि के साथ)। बाद में, जब आपने इस खंड को कम किया है, तो आप इस सरणी को टुकड़े में पार करने के लिए सेटर विधि का उपयोग कर सकते हैं।

-1

1.Use BroadCastReceiver (थोड़ा जटिल)

2.Use SharePreference MyApplication में

3.save डेटा फैली आवेदन

+0

के उपयोग को कम करने के लिए दोबारा दोहराना नहीं चाहता हूं। मुझे शैपेरेंस के बारे में पता है कि यह एक आसान तरीका है, लेकिन मुझे नहीं लगता कि Share12ref उस – Soufiane

0

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

+0

के लिए बनाया गया था कुछ plz – Soufiane

5

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

public class Fragment_1 extends Fragment{ 

    DataCommunication mCallback; 

@Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mCallback = (DataCommunication) context; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(context.toString() 
        + " must implement DataCommunication"); 
     } 
    } 

    ... 
:

आप इस उद्देश्य के लिए एक इंटरफेस का उपयोग करने

public interface DataCommunication { 
    public String getMyVariableX(); 
    public void setMyVariableX(String x); 
    public int getMyVariableY(); 
    public void setMyVariableY(int y); 
} 

फिर, उसे अपने गतिविधि के अंदर लागू

public class MainActivity extends Activity implements DataCommunication { 

    private String x; 
    private int y; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
    } 

    ... 

    @Override 
    public String getMyVariableX(){ 
     return x; 
    } 

    @Override 
    public void setMyVariableX(String x){ 
     //do whatever or just set 
     this.x = x; 
    } 

    @Override 
    public int getMyVariableY(){ 
     return y; 
    } 

    @Override 
    public void setMyVariableY(int y){ 
     //do whatever or just set 
     this.y = y; 
    } 

    ... 

फिर, सभी अपने टुकड़े में गतिविधि देते हैं की जरूरत है

और आखिरकार, जब आपको एक टुकड़े के अंदर एक चर का उपयोग करने की आवश्यकता होती है, तो बस ' बना लिया

https://developer.android.com/training/basics/fragments/communicating.html

+1

प्रतिनिधि पैटर्न, सर्वोत्तम विचार –

+0

मेरे लिए काम नहीं करता है मेरे पास देखने के लिए खंड को जोड़ने के साथ शून्य मान या समस्या है पेजर एडाप्टर – Soufiane

+0

@ सॉफियान कृपया बताएं कि आपका क्या मतलब है। जवाब एक बहुत अच्छा समाधान देता है, अब आपको जो चाहिए वह आपकी आवश्यकताओं के अनुरूप है जैसे गेटर्स या सेटर्स में शून्य जांच जोड़ना। – Sufian

1

यह करने के लिए सबसे आसान तरीका है Bundle उपयोग करने के लिए है।

टुकड़ा एक::

Bundle b = new Bundle(); 
b.putString("Key", "YourValue"); 
b.putInt("YourKey", 1); 

FragmentB fragB = new FragmentB(); 
fragB.setArguments(b); 
getFragmentManager().beginTransaction().replace(R.id.your_container, fragB); 

टुकड़ा बी:

Bundle b = this.getArguments(); 
if(b != null){ 
    int i = b.getInt("YourKey"); 
    String s =b.getString("Key"); 
} 

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

संबंधित मुद्दे