คำถามติดแท็ก android-fragments

แฟรกเมนต์เป็นตัวแทนพฤติกรรมที่สามารถใช้ซ้ำได้หรือส่วนต่าง ๆ ของส่วนต่อประสานผู้ใช้ในแอพ Android

5
การทำความเข้าใจ setRetainInstance ของชิ้นส่วน (บูลีน)
เริ่มต้นด้วยเอกสาร: โมฆะสาธารณะ setRetainInstance (บูลีนเก็บ) ควบคุมว่าจะเก็บอินสแตนซ์ของส่วนย่อยไว้ในการสร้างกิจกรรมใหม่หรือไม่ (เช่นจากการเปลี่ยนแปลงการกำหนดค่า) สามารถใช้กับชิ้นส่วนที่ไม่ได้อยู่ในกองซ้อนด้านหลังเท่านั้น หากตั้งค่าวงจรชีวิตของแฟรกเมนต์จะแตกต่างกันเล็กน้อยเมื่อมีการสร้างกิจกรรมใหม่: onDestroy () จะไม่ถูกเรียก (แต่ onDetach () จะยังคงอยู่เนื่องจากแฟรกเมนต์กำลังถูกแยกออกจากกิจกรรมปัจจุบัน) onCreate (Bundle) จะไม่ถูกเรียกใช้เนื่องจากแฟรกเมนต์ไม่ได้ถูกสร้างขึ้นใหม่ onAttach (กิจกรรม) และ onActivityCreated (Bundle) จะยังคงถูกเรียกใช้ ฉันมีคำถาม: แฟรกเมนต์ยังรักษามุมมองหรือไม่หรือสิ่งนี้จะถูกสร้างใหม่ตามการเปลี่ยนแปลงการกำหนดค่าหรือไม่? "เก็บรักษา" หมายความว่าอะไร? ส่วนจะถูกทำลายเมื่อผู้ใช้ออกจากกิจกรรมหรือไม่ ทำไมมันไม่ทำงานกับเศษเล็กเศษน้อยในกองหลัง? กรณีการใช้งานแบบไหนที่เหมาะสมกับการใช้วิธีนี้?

23
รหัสซ้ำ, แท็กเป็นโมฆะหรือรหัสหลักที่มีแฟรกเมนต์อื่นสำหรับ com.google.android.gms.maps.MapFragment
ฉันมีแอปพลิเคชั่นสามแท็บ แต่ละแท็บมีไฟล์. xml สำหรับเลย์เอาต์ของตัวเอง main.xml มีแฟรกเมนต์แผนที่ของตัวเอง เป็นแอปที่แสดงขึ้นเมื่อแอปพลิเคชันเปิดตัวครั้งแรก ทุกอย่างทำงานได้ดียกเว้นเมื่อฉันเปลี่ยนระหว่างแท็บ หากฉันพยายามเปลี่ยนกลับไปที่แท็บชิ้นส่วนแผนที่ฉันได้รับข้อผิดพลาดนี้ การสลับไปมาระหว่างแท็บอื่น ๆ ใช้งานได้ดี มีอะไรผิดปกติที่นี่? นี่คือคลาสหลักและ main.xml ของฉันรวมถึงคลาสที่เกี่ยวข้องที่ฉันใช้ (คุณจะพบบันทึกข้อผิดพลาดที่ด้านล่าง) ชั้นหลัก package com.nfc.demo; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.os.Bundle; import android.widget.Toast; public class NFCDemoActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActionBar bar = getActionBar(); …

3
ความแตกต่างและการใช้งานของ onCreate (), onCreateView () และ onActivityCreated () เป็นชิ้นส่วน
อะไรคือความแตกต่างระหว่างonCreate(), onCreateView()และonActivityCreated()ในชิ้นส่วนและสิ่งที่พวกเขาแต่ละคนจะนำมาใช้สำหรับ?

10
เลิกใช้ Android Fragment onAttach () แล้ว
ฉันได้อัพเดทแอพของฉันเพื่อใช้ไลบรารี่สนับสนุนล่าสุด (เวอร์ชั่น 23.0.0) ฉันพบว่าพวกเขาเลิกใช้ฟังก์ชั่น onAttach () ของคลาส Fragment แทน: onAttach (Activity activity) ตอนนี้: onAttach (Context context) เนื่องจากแอพของฉันใช้กิจกรรมที่ผ่านไปก่อนที่จะเลิกใช้งานโซลูชันที่เป็นไปได้ฉันคิดว่า: @Override public void onAttach(Context context) { super.onAttach(context); activity = getActivity(); } นั่นเป็นวิธีที่ถูกต้องหรือไม่ UPDATE: หากฉันเรียกใช้อุปกรณ์ที่มี API ต่ำกว่า 23 ใหม่ onAttach () จะไม่ถูกเรียก ฉันหวังว่านี่ไม่ใช่สิ่งที่พวกเขาตั้งใจจะทำ! อัปเดต 2: ปัญหาได้รับการแก้ไขด้วยการอัปเดตล่าสุดของ SDK ฉันได้ทดสอบกับอุปกรณ์ API 22 ของฉันและกำลังเรียกใช้ onAttach (บริบท) คลิกที่นี่เพื่อติดตามรายงานข้อผิดพลาดฉันได้เปิดสองสามสัปดาห์ที่ผ่านมาและคำตอบจากพวกที่ …

13
เรียกวิธีการกิจกรรมจากส่วน
พยายามที่จะเรียกวิธีการในกิจกรรมของฉันจากส่วน ฉันต้องการแฟรกเมนต์เพื่อให้ข้อมูลเมธอดและรับข้อมูลเมื่อเมธอดส่งคืน ฉันต้องการบรรลุคล้ายกับการเรียกใช้วิธีการคงที่ แต่ไม่มีการใช้คงที่เพราะมันสร้างปัญหาในกิจกรรม ใหม่สำหรับชิ้นส่วนดังนั้นฉันต้องการคำอธิบายที่ง่ายและสอนได้! ขอบคุณ!

20
อัปเดต ViewPager แบบไดนามิกหรือไม่
ฉันไม่สามารถอัปเดตเนื้อหาใน ViewPager การใช้วิธีที่ถูกต้องคืออะไร instantiateItem () และ getItem () ในคลาส FragmentPagerAdapter? ฉันใช้ getItem () เพื่อยกตัวอย่างและส่งคืนชิ้นส่วนของฉัน: @Override public Fragment getItem(int position) { return new MyFragment(context, paramters); } มันใช้งานได้ดี ยกเว้นฉันไม่สามารถเปลี่ยนเนื้อหาได้ ดังนั้นฉันจึงพบสิ่งนี้: ViewPager PagerAdapter ไม่อัปเดตมุมมอง "วิธีการของฉันคือใช้เมธอด setTag () สำหรับมุมมองอินสแตนซ์ใด ๆ ในเมธอด instantiateItem ()" ตอนนี้ฉันต้องการใช้ instantiateItem () เพื่อทำเช่นนั้น แต่ฉันไม่รู้ว่าฉันต้องส่งคืนอะไร (ชนิดคือ Object) และความสัมพันธ์กับ getItem (ตำแหน่ง int) …

20
ส่งข้อมูลจากกิจกรรมไปยังส่วนใน Android
ฉันมีสองชั้น EditTextแรกคือกิจกรรมที่สองคือส่วนที่ฉันมีบางอย่าง ในกิจกรรมฉันมีคลาสย่อยที่มี async-task และในวิธีที่doInBackgroundฉันได้รับผลบางอย่างซึ่งฉันบันทึกลงในตัวแปร ฉันจะส่งตัวแปรนี้จากคลาสย่อย "กิจกรรมของฉัน" ไปยังส่วนนี้ได้อย่างไร

6
requestCode ผิดใน onActivityResult
ฉันเริ่มกิจกรรมใหม่จาก Fragment ของฉันด้วย startActivityForResult(intent, 1); และต้องการจัดการผลลัพธ์ในกิจกรรมหลักของ Fragment: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "onActivityResult, requestCode: " + requestCode + ", resultCode: " + resultCode); if (requestCode == 1) { // bla bla bla } } ปัญหาคือว่าฉันไม่เคยมีฉันได้โพสต์เพียงเพื่อrequestCodestartActivityForResult() ผมได้รับสิ่งที่ต้องการ0x40001, 0x20001ฯลฯ กับชุดบิตที่สูงขึ้นแบบสุ่ม เอกสารไม่ได้พูดอะไรเกี่ยวกับเรื่องนี้ ความคิดใด ๆ

9
ความแตกต่างระหว่าง add (), replace () และ addToBackStack ()
อะไรคือความแตกต่างที่สำคัญระหว่างการเรียกใช้วิธีการเหล่านี้: fragmentTransaction.addToBackStack(name); fragmentTransaction.replace(containerViewId, fragment, tag); fragmentTransaction.add(containerViewId, fragment, tag); การแทนที่แฟรกเมนต์ที่มีอยู่แล้วหมายความว่าอย่างไรและการเพิ่มแฟรกเมนต์ให้กับสถานะกิจกรรมและการเพิ่มกิจกรรมในสแต็กหลัง ประการที่สองด้วยfindFragmentByTag()การค้นหาแท็กนี้ด้วยadd()/ replace()method หรือaddToBackStack()วิธีการหรือไม่

30
Android Fragment ไม่พบมุมมองสำหรับ ID?
ฉันมีชิ้นส่วนที่ฉันพยายามเพิ่มเข้าไปในมุมมอง FragmentManager fragMgr=getSupportFragmentManager(); feed_parser_activity content = (feed_parser_activity)fragMgr .findFragmentById(R.id.feedContentContainer); FragmentTransaction xaction=fragMgr.beginTransaction(); if (content == null || content.isRemoving()) { content=new feed_parser_activity(item.getLink().toString()); xaction .add(R.id.feedContentContainer, content) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .addToBackStack(null) .commit(); Log.e("Abstract", "DONE"); } เมื่อประมวลผลรหัสนี้ฉันได้รับข้อผิดพลาดต่อไปนี้ในการแก้ปัญหา .. java.lang.IllegalArgumentException: No view found for id 0x7f080011 for fragment feed_parser_activity{41882f50 #2 id=0x7f080011} feed_parser_activityเป็นแฟรกเมนต์ที่ตั้งค่าเป็นโครงร่าง Fragment ใน xml ฉันใช้ FragmentActivity feed_parser_layoutที่จะเป็นเจ้าภาพส่วนเค้าโครงถือ ฉันกำลังเขียนโค้ดด้านบนถูกต้องหรือไม่

12
ส่วนย่อยมากกว่าปัญหาชิ้นส่วนอื่น
เมื่อฉันแสดงแฟรกเมนต์หนึ่งอัน (ซึ่งเต็มหน้าจอพร้อม#77000000พื้นหลัง) เหนือแฟรกเมนต์อื่น (ลองเรียกว่า main) แฟรกเมนต์หลักของฉันยังคงตอบสนองต่อการคลิก (เราสามารถคลิกปุ่มได้แม้ว่าเราจะไม่เห็นก็ตาม) คำถาม : วิธีป้องกันการคลิกในส่วนแรก (หลัก) แก้ไข น่าเสียดายที่ฉันไม่สามารถซ่อนชิ้นส่วนหลักเพราะฉันใช้พื้นหลังโปร่งใสในส่วนที่สอง (ดังนั้นผู้ใช้สามารถเห็นสิ่งที่อยู่ด้านหลัง)

18
แทนที่ส่วนใน ViewPager
ฉันพยายามที่จะใช้ส่วนที่มีการใช้ViewPager FragmentPagerAdapterสิ่งที่ฉันกำลังมองหาที่จะบรรลุคือการแทนที่ส่วนที่อยู่ในหน้าแรกของViewPagerด้วยอีกอันหนึ่ง เพจเจอร์ประกอบด้วยสองหน้า คนแรกเป็นที่หนึ่งที่สองคือFirstPagerFragment SecondPagerFragmentคลิกที่ปุ่มหน้าแรก ฉันต้องการแทนที่FirstPagerFragmentด้วย NextFragment มีรหัสของฉันด้านล่าง public class FragmentPagerActivity extends FragmentActivity { static final int NUM_ITEMS = 2; MyAdapter mAdapter; ViewPager mPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_pager); mAdapter = new MyAdapter(getSupportFragmentManager()); mPager = (ViewPager) findViewById(R.id.pager); mPager.setAdapter(mAdapter); } /** * Pager Adapter */ public static class …

9
กิจกรรม AppCompatActivity, FragmentActivity และ ActionBarActivity: เมื่อใดที่จะใช้
ฉันมาจาก iOS ที่ง่ายและคุณใช้ UIViewController อย่างไรก็ตามในสิ่งที่ Android ดูเหมือนซับซ้อนมากขึ้นด้วย UIComponents บางอย่างสำหรับระดับ API ที่เฉพาะเจาะจง ฉันอ่าน BigNerdRanch สำหรับ Android (หนังสือเล่มนี้คือประมาณ 2 ปี) และพวกเขาแนะนำให้ผมใช้ในการเป็นเจ้าภาพของฉันActivity FragmentActivitiesอย่างไรก็ตามฉันคิดว่าActivityเลิกใช้แล้ว ดังนั้นสำหรับ API ระดับ 22 (ด้วยการสนับสนุนขั้นต่ำสำหรับ API ระดับ 15 หรือ 16) ฉันควรใช้ทั้งสองอย่างในการโฮสต์ส่วนประกอบและส่วนประกอบเองอย่างไร มีการใช้สำหรับสิ่งเหล่านี้ทั้งหมดหรือฉันควรใช้เพียงหนึ่งหรือสองอย่าง

6
ชิ้นส่วน Android และภาพเคลื่อนไหว
คุณควรใช้การเลื่อนแบบนั้นเช่นไคลเอ็นต์ Honeycomb Gmail ใช้อย่างไร สามารถTransactionManagerจัดการสิ่งนี้โดยอัตโนมัติโดยการเพิ่มและลบ Fragments มันยากที่จะทดสอบสิ่งนี้เนื่องจากตัวจำลองเป็นสไลด์โชว์ :)

4
ชิ้นส่วนต้องการตัวสร้างที่ว่างเปล่าจริงๆหรือ
ฉันมีตัวFragmentสร้างที่ใช้อาร์กิวเมนต์หลายตัว แอพของฉันทำงานได้ดีในระหว่างการพัฒนา แต่ในการผลิตผู้ใช้ของฉันบางครั้งก็เห็นความผิดพลาดนี้: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment make sure class name exists, is public, and has an empty constructor that is public ฉันจะทำให้นวกรรมิกว่างเปล่าเป็นข้อผิดพลาดนี้แสดงให้เห็น Fragmentแต่ไม่ได้ทำให้ความรู้สึกกับผมตั้งแต่นั้นมาผมจะมีการเรียกวิธีการแยกต่างหากที่จะเสร็จสิ้นการตั้งค่า ฉันอยากรู้ว่าทำไมความผิดพลาดนี้เกิดขึ้นเป็นครั้งคราวเท่านั้น บางทีฉันใช้ViewPagerไม่ถูกต้อง? ผมยกตัวอย่างทั้งหมดของตัวเองและบันทึกไว้ในรายการที่อยู่ภายในได้Fragment Activityฉันไม่ได้ใช้FragmentManagerธุรกรรมเนื่องจากViewPagerตัวอย่างที่ฉันเห็นไม่จำเป็นต้องใช้และทุกอย่างดูเหมือนจะทำงานในระหว่างการพัฒนา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.