คืออะไรbundle
ในการประยุกต์ใช้ Android? ควรใช้เมื่อใด
คืออะไรbundle
ในการประยุกต์ใช้ Android? ควรใช้เมื่อใด
คำตอบ:
โดยทั่วไปการรวมกลุ่มจะใช้สำหรับการส่งผ่านข้อมูลระหว่างกิจกรรม Android ต่างๆ ขึ้นอยู่กับคุณว่าคุณต้องการส่งผ่านค่าใด แต่กลุ่มรวมสามารถเก็บค่าทุกประเภทและส่งผ่านไปยังกิจกรรมใหม่ได้
คุณสามารถใช้สิ่งนี้:
Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);
startActivity(intent);
คุณสามารถรับค่าที่ส่งผ่านได้โดยทำดังนี้
Bundle extras = intent.getExtras();
String tmp = extras.getString("myKey");
คุณสามารถหาข้อมูลเพิ่มเติมได้ที่:
ส่งผ่านข้อมูลระหว่างกิจกรรมโดยใช้Bundle
และIntent
วัตถุ
คุณสร้างBundle
วัตถุเป็นครั้งแรก
Bundle b = new Bundle();
จากนั้นเชื่อมโยงข้อมูลสตริงที่จัดเก็บไว้anystring
ด้วยคีย์บันเดิล"myname"
b.putString("myname", anystring);
ตอนนี้สร้างIntent
วัตถุ
Intent in = new Intent(getApplicationContext(), secondActivity.class);
ส่งวัตถุบันเดิลb
ไปที่เจตนา
in.putExtras(b);
และเริ่มกิจกรรมที่สอง
startActivity(in);
ในกิจกรรมที่สองเราต้องเข้าถึงข้อมูลที่ส่งผ่านจากกิจกรรมแรก
Intent in = getIntent();
ตอนนี้คุณต้องได้รับข้อมูลจากชุดข้อมูล
Bundle b = in.getExtras();
สุดท้ายรับค่าของข้อมูลสตริงที่เกี่ยวข้องกับคีย์ชื่อ "myname"
String s = b.getString("myname");
ฉันต้องเพิ่มว่าชุดข้อมูลนั้นถูกใช้โดยกิจกรรมเพื่อส่งผ่านข้อมูลให้กับตัวเองในอนาคต
เมื่อหน้าจอหมุนหรือเมื่อเริ่มกิจกรรมอื่นวิธีการprotected void onSaveInstanceState(Bundle outState)
จะถูกเรียกใช้และกิจกรรมจะถูกทำลาย ต่อมามีการสร้างอินสแตนซ์อื่นของกิจกรรมและpublic void onCreate(Bundle savedInstanceState)
เรียกใช้ เมื่ออินสแตนซ์แรกของกิจกรรมถูกสร้างขึ้นบันเดิลจะเป็นค่าว่าง และหากชุดข้อมูลนั้นไม่เป็นโมฆะกิจกรรมจะดำเนินการต่อโดยเริ่มต้นธุรกิจของผู้เริ่มต้น
Android บันทึกข้อความในฟิลด์ข้อความโดยอัตโนมัติ แต่ไม่ได้บันทึกทุกอย่างและบางครั้งข้อบกพร่องที่ปรากฏขึ้น
อย่างไรก็ตามรูปแบบการต่อต้านที่พบมากที่สุดคือการสมมติว่าเป็นการonCreate()
เริ่มต้น มันผิดเพราะมันจะต้องคืนสถานะด้วย
มีตัวเลือกในการปิดใช้งานพฤติกรรม "สร้างกิจกรรมการหมุนซ้ำ" แต่จะไม่ป้องกันข้อผิดพลาดที่เกี่ยวข้องกับการเริ่มต้นใหม่มันจะทำให้ยากที่จะพูดถึง
onPause()
ยังทราบว่าวิธีการเดียวที่มีการเรียกร้องมีการประกันเมื่อมีกิจกรรมที่กำลังจะถูกทำลายคือ (ดูกราฟวงจรชีวิตของกิจกรรมในเอกสาร)
A Bundle
เป็นอย่างมากเหมือนกับMap
วัตถุJava ที่จับคู่String
คีย์กับค่า มันถูกใช้เพื่อส่งผ่านข้อมูลระหว่างกิจกรรมและส่วนประกอบของแอปพลิเคชันอื่น ๆ มันยังถูกใช้โดยกรอบการทำงานเพื่อจับภาพและเรียกคืนข้อมูลสถานะ
เหตุผลที่ Android ไม่ได้ใช้Map
วัตถุเก่าแบบธรรมดาสำหรับเรื่องนี้นั่นMap
ก็คือความยืดหยุ่นเกินไป มันสามารถมีวัตถุ (เช่นพูด, I / O สตรีม) ที่ไม่สามารถต่อเนื่อง Bundle
API จำกัด ประเภทของวัตถุที่สามารถเพิ่มการมัดในลักษณะดังกล่าวว่าเนื้อหาของกลุ่มที่มีการรับประกันว่าจะ serializable กรอบการทำงานของ Android ขึ้นอยู่กับคุณสมบัตินี้
ผมขอแนะนำให้คุณอ่านเอกสารในการประยุกต์ใช้ความรู้พื้นฐาน สิ่งนี้อธิบายได้ในสิ่งอื่น ๆ การรวมกลุ่มและความตั้งใจคืออะไรและใช้เพื่ออะไร
การรวมกลุ่มสามารถใช้ในการส่งข้อมูลโดยพลการจากกิจกรรมหนึ่งไปยังอีกกิจกรรมหนึ่งโดยเจตนา เมื่อคุณออกอากาศเจตนากิจกรรมที่สนใจ (และ BroadcastRecievers อื่น ๆ ) จะได้รับแจ้งเรื่องนี้ ความตั้งใจสามารถมี Bundle เพื่อให้คุณสามารถส่งข้อมูลเพิ่มเติมพร้อมกับเจตนา
การรวมกลุ่มเป็นการจับคู่คีย์ - ค่าดังนั้นในลักษณะที่เหมือนแฮช แต่ไม่ จำกัด อย่างเคร่งครัดในการแม็พวัตถุ String / Foo เดียว โปรดทราบว่าเฉพาะบางประเภทข้อมูลเท่านั้นที่ถือว่าเป็น "Parcelable" และมีการสะกดคำอย่างชัดเจนใน Bundle API
เพียงแค่สร้างมัด
Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);
ใน "this_is_the_next_class.class"
คุณสามารถดึงไอเท็มแบบนี้ได้
Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);
บันเดิลถูกใช้เพื่อส่งผ่านข้อมูลระหว่างกิจกรรม คุณสามารถสร้างบันเดิลส่งต่อไปยัง Intent ที่เริ่มต้นกิจกรรมซึ่งสามารถใช้จากกิจกรรมปลายทาง
บันเดิล: - การจับคู่จากค่าสตริงไปยังประเภทพัสดุภัณฑ์ต่างๆ
บันเดิลมักจะใช้สำหรับส่งข้อมูลระหว่างกิจกรรมต่าง ๆ ของ android
เมื่อเราเรียก onPause () จากนั้น onStop () และจากนั้นในลำดับย้อนกลับ onStop () เพื่อ onPause ()
ข้อมูลที่บันทึกไว้ซึ่งระบบใช้เพื่อกู้คืนสถานะก่อนหน้านี้เรียกว่า "สถานะอินสแตนซ์" และเป็นชุดของคู่ค่าคีย์ที่เก็บไว้ในวัตถุ Bundle
บันเดิลใช้เพื่อแชร์ข้อมูลระหว่างกิจกรรมและบันทึกสถานะของแอปใน oncreate () วิธีการเพื่อให้แอปรู้ว่ามันหยุดอยู่ที่ใด ... ฉันหวังว่ามันจะช่วย :)
การใช้มัดส่งข้อมูลจากกิจกรรมหนึ่งไปยังกิจกรรมอื่นด้วยความช่วยเหลือของวัตถุประสงค์; บันเดิลเก็บข้อมูลที่สามารถเป็นประเภทใดก็ได้
ตอนนี้ฉันบอกว่าวิธีการสร้างชุดข้อมูลการส่งผ่านระหว่างสองกิจกรรม
ขั้นตอนที่ 1: ในกิจกรรมแรก
Bundle b=new Bundle();
b.putString("mkv",anystring);
Intent in=new Intent(getApplicationContext(),secondActivity.class);
in.putExtras(b);
startActivity(in);
ขั้นตอนที่ 2: ในกิจกรรมที่สอง
Intent in=getIntent();
Bundle b=in.getExtras();
String s=b.getString("mkv");
ฉันคิดว่านี่มีประโยชน์สำหรับคุณ ...........
บันเดิลไม่เพียง แต่ถ่ายโอนข้อมูลระหว่างสองส่วนประกอบที่แตกต่างกัน แต่ที่สำคัญกว่านั้นใช้เพื่อเรียกคืนค่าที่เก็บไว้ก่อนที่กิจกรรมจะถูกทำลายลงในกิจกรรมใหม่
เช่นข้อความในเครื่องมือหรือเลื่อนตำแหน่งของEditText
ListView
กิจกรรมแรก:
String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());
กิจกรรมที่สอง:
String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");