Fragments में setArguments () और getArguments () विधियों का उपयोग कैसे करें?


98

मेरे 2 टुकड़े हैं: (1) Frag1 (2) Frag2।

Frag1

bundl = new Bundle();
bundl.putStringArrayList("elist", eList);

Frag2 dv = new Frag2();
dv.setArguments(bundl);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.the_fragg,dv);
ft.show(getFragmentManager().findFragmentById(R.id.the_fragg)); 
ft.addToBackStack(null);
ft.commit();

मुझे यह डेटा Frag2 में कैसे मिलेगा?

जवाबों:


26

आपके पास एक विधि है जिसे कक्षा के getArguments()अंतर्गत आता है Fragment


192

बस फोन getArguments()अपने में Frag2की onCreateView()विधि:

public class Frag2 extends Fragment {

     public View onCreateView(LayoutInflater inflater,
         ViewGroup containerObject,
         Bundle savedInstanceState){
         //here is your arguments
         Bundle bundle=getArguments(); 

        //here is your list array 
        String[] myStrings=bundle.getStringArray("elist");   
     }
}

12
यह मेरे मामले में अशक्त लौट रहा है, किसी भी विचार यह क्यों हो रहा है?
अनिरुद्ध

2
आप ArrayList को बंडल में रख रहे हैं , लेकिन एक स्ट्रिंग सरणी प्राप्त कर रहे हैं। आपको करना चाहिएbundle.getStringArrayList("elist");
राफेल

1
आप रिटर्न स्टेटमेंट भूल गए:return super.onCreateView(inflater, container, savedInstanceState);
user41805

4
हर समय ऑनक्रीट कॉलिंग। तो बस oncreate () विधि में getarguments को बुलाओ। यह केवल तभी कॉल करेगा जब टुकड़ा नष्ट हो जाता है या नया बनाया गया समय होता है।
मोहम्मद इब्राहिम

5
@almaz_from_kazan @HabeebPerwad आप अंदर क्यों उपयोग कर getArguments() रहे हैं onCreateView, अंदर नहीं onCreate?
निक केबर

38

जैसे: डेटा जोड़ें: -

   Bundle bundle = new Bundle();
   bundle.putString("latitude", latitude);
   bundle.putString("longitude", longitude);
   bundle.putString("board_id", board_id);
   MapFragment mapFragment = new MapFragment();
   mapFragment.setArguments(bundle);

जैसे: डेटा प्राप्त करें: -

String latitude =  getArguments().getString("latitude")

7

Frag1 में:

Bundle b = new Bundle();

b.putStringArray("arrayname that use to retrive in frag2",StringArrayObject);

Frag2.setArguments(b);

Frag2 में:

Bundle b = getArguments();

String[] stringArray = b.getStringArray("arrayname that passed in frag1");

यह इत्ना आसान है।


5

सही तरीके से फ्रैगमेंट को इंस्टेंट करना!

getArguments() setArguments()जब यह स्थैतिक विधि का उपयोग करके एक फ्रैगमेंट को तत्काल करने की बात आती है तो विधियाँ बहुत उपयोगी लगती हैं।
अर्थातMyfragment.createInstance(String msg)

यह कैसे करना है?

खंडित कोड

public MyFragment extends Fragment {

    private String displayMsg;
    private TextView text;

    public static MyFragment createInstance(String displayMsg)
    {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();
        args.setString("KEY",displayMsg);
        fragment.setArguments(args);           //set
        return fragment;
    }

    @Override
    public void onCreate(Bundle bundle)
    {
        displayMsg = getArguments().getString("KEY"):    // get 
    }

    @Override
    public View onCreateView(LayoutInlater inflater, ViewGroup parent, Bundle bundle){
        View view = inflater.inflate(R.id.placeholder,parent,false);
        text = (TextView)view.findViewById(R.id.myTextView);
        text.setText(displayMsg)    // show msg
        returm view;
   }

}

मान लीजिए कि आप एक इंस्टेंस बनाते हुए एक स्ट्रिंग पास करना चाहते हैं। यह आप इसे कैसे करेंगे।

MyFragment.createInstance("This String will be shown in textView");

अधिक पढ़ें

1) क्यों Myfragment.getInstance (स्ट्रिंग संदेश) नए MyFragment (स्ट्रिंग संदेश) पर पसंद किया जाता है?
2) टुकड़े पर नमूना कोड


android.os.Bundle में setString नहीं है। क्या आपका मतलब है पुटस्ट्रिंग ()?
रब्बी

2

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


यह एक गलत तरीका है। यदि कोई खंड पुन: बनाता है, तो यह उन मापदंडों को खो देगा। टुकड़े में भेजे गए पैरामीटर को क्रमिक होना चाहिए, के माध्यम से पारित किया जाना चाहिए setArguments()। गैर-परिवर्तनीय मापदंडों को सेटर के साथ सेट किया जा सकता है, लेकिन इसे फिर से गतिविधि / खंडन विश्राम पर बुलाया जाना चाहिए।
कूलमाइंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.