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

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

12
android fragment- วิธีบันทึกสถานะการดูในแฟรกเมนต์เมื่อแฟรกเมนต์อื่นถูกดันบนสุดของมัน
ใน Android FragAจะมีการเพิ่มแฟรกเมนต์(พูด) ลงใน backstack และแฟรกเมนต์อื่น (พูดFragB) จะขึ้นไปด้านบน ตอนนี้กดปุ่มกลับFragAมาที่ด้านบนและonCreateView()เรียกว่า ตอนนี้ฉันมีFragAสถานะที่เฉพาะเจาะจงก่อนFragBถูกผลักขึ้นไปบนมัน คำถามของฉันคือฉันFragAจะคืนค่าสู่สถานะก่อนหน้าได้อย่างไร มีวิธีการบันทึกสถานะ (เช่นพูดใน Bundle) และถ้าเป็นเช่นนั้นแล้ววิธีการที่ฉันควรจะแทนที่?

12
การแทนที่ส่วนย่อยด้วยส่วนอื่นภายในกลุ่มกิจกรรม
ฉันมีส่วนหนึ่งในกิจกรรมกลุ่มและฉันต้องการแทนที่ด้วยส่วนอื่น: FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); SectionDescriptionFragment bdf = new SectionDescriptionFragment(); ft.replace(R.id.book_description_fragment, bdf); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.addToBackStack(null); ft.commit(); มันใช้งานได้ดีเมื่อทำเป็นโครงการแยกโดยไม่ต้องใช้กลุ่มกิจกรรมทุกอย่างทำงานได้ดีใน log cat เมื่อการควบคุมเข้าไปใน getview () แต่ไม่มีมุมมองที่มองเห็นได้ไม่มีข้อยกเว้นใด ๆ เกิดขึ้นฉันต้องการให้ส่วนรายละเอียดหนังสือเป็น ถูกแทนที่ด้วยส่วนรายละเอียดส่วน Xml ของส่วนรายละเอียดหนังสือมี id book_description_fragment และ xml สำหรับส่วนคำอธิบายส่วนมี id section_description_fragment โค้ดด้านบนอยู่ในเมธอด onClick ของรายการฉันต้องการให้เมื่อผู้ใช้แตะที่รายการในมุมมองเลื่อนแนวนอนจากนั้นส่วนจะเปลี่ยนไป

18
java.lang.IllegalStateException: ไม่สามารถดำเนินการนี้หลังจาก onSaveInstanceState
ฉันใช้ไลบรารีการสนับสนุนสำหรับแอปของฉัน ใน FragmentActivity ของฉันฉันใช้ AsyncTask เพื่อดาวน์โหลดข้อมูลจากอินเทอร์เน็ต ในเมธอด onPreExecute () ฉันเพิ่ม Fragment และในเมธอด onPostExecute () ฉันลบมันอีกครั้ง เมื่อการวางแนวมีการเปลี่ยนแปลงในระหว่างนี้ฉันจะได้รับข้อยกเว้นดังกล่าวข้างต้น โปรดดูรายละเอียด: private class onFriendAddedAsyncTask extends AsyncTask<String, Void, String> { DummyFragment dummyFragment; FragmentManager fm; FragmentTransaction ft; @Override protected void onPreExecute() { Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute"); dummyFragment = DummyFragment.newInstance(); fm = getSupportFragmentManager(); ft = fm.beginTransaction(); ft.add(dummyFragment, "dummy_fragment"); ft.commit(); …

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

7
ฉันสามารถใช้เพจเจอร์มุมมองกับมุมมองได้หรือไม่ (ไม่ใช่กับส่วนย่อย)
ฉันใช้ViewPagerสำหรับการปัดระหว่างFragmentsแต่ฉันสามารถใช้ViewPagerเพื่อปัดระหว่างViewsเลย์เอาต์ XML แบบธรรมดาได้หรือไม่ นี่คือหน้าของฉันAdapterสำหรับ ViewPager ซึ่งใช้ในการปัดระหว่าง Fragments: import java.util.List; import com.app.name.fragments.TipsFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.view.ViewGroup; public class PageAdapter extends FragmentPagerAdapter { /** * */ List<Fragment> fragments; public PageAdapter(FragmentManager fm,List<Fragment> frags) { super(fm); fragments = frags; } @Override public Fragment getItem(int arg0) { // TODO …

7
นี่เป็นวิธีที่ถูกต้องในการล้างสแต็ก Fragment back เมื่อออกจากสแต็กซ้อนกันหรือไม่?
ฉันกำลังใช้ไลบรารีความเข้ากันได้ของ Android เพื่อนำแฟรกเมนต์มาใช้และขยายตัวอย่างเลย์เอาต์เพื่อให้แฟรกเมนต์มีปุ่มที่จะดับแฟรกเมนต์อื่น ในบานหน้าต่างตัวเลือกทางด้านซ้ายผมมี 5 รายการตัวเลือก A B C D E- แต่ละโหลดชิ้นส่วน (ผ่านFragmentTransaction:replace) ในบานหน้าต่างรายละเอียด -a b c d e ตอนนี้ฉันได้ขยายแฟรกเมนต์eเพื่อให้มีปุ่มซึ่งโหลดแฟรกเมนต์อื่นขึ้นe1ในบานหน้าต่างรายละเอียด ฉันทำสิ่งนี้ในeวิธี onClick ของส่วนดังนี้ FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); ft.replace(R.id.details_frag, newFrag); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.addToBackStack(null); ft.commit(); ถ้าฉันทำการเลือกต่อไปนี้: E - e - e1 - D - E ส่วนนั้นeอยู่ในบานหน้าต่างรายละเอียด นี่คือสิ่งที่ดีและสิ่งที่ฉันต้องการ อย่างไรก็ตามถ้าฉันกดbackปุ่ม ณ จุดนี้มันไม่ทำอะไรเลย ฉันต้องคลิกสองครั้งเพราะe1ยังอยู่ในสแต็ก นอกจากนี้หลังจากคลิกไปรอบ ๆ …

6
ตัวอย่างการทำงานที่สมบูรณ์ของภาพเคลื่อนไหวสามมิติของ Gmail หรือไม่
TL; DR: ฉันกำลังมองหาตัวอย่างการทำงานที่สมบูรณ์ของสิ่งที่ฉันจะอ้างถึงว่าเป็น "ภาพเคลื่อนไหวสามมิติของ Gmail" โดยเฉพาะเราต้องการเริ่มต้นด้วยสองแฟรกเมนต์เช่นนี้: เมื่อมีเหตุการณ์ UI บางอย่าง (เช่นแตะบางสิ่งใน Fragment B) เราต้องการ: แฟรกเมนต์ A เพื่อเลื่อนหน้าจอไปทางซ้าย แฟรกเมนต์ B เพื่อเลื่อนไปที่ขอบด้านซ้ายของหน้าจอและย่อขนาดเพื่อดึงตำแหน่งที่ว่างโดย Fragment A แฟรกเมนต์ C เพื่อเลื่อนจากด้านขวาของหน้าจอและเพื่อจับภาพที่ว่างโดย Fragment B และในการกดปุ่ม BACK เราต้องการให้ชุดการทำงานนั้นกลับด้าน ตอนนี้ฉันเห็นการใช้งานบางส่วนมากมาย ฉันจะตรวจสอบสี่ของพวกเขาด้านล่าง พวกเขาต่างก็มีปัญหา @Reto ไมเออร์มีส่วนคำตอบนี้เป็นที่นิยมกับคำถามพื้นฐานที่เหมือนกันแสดงให้เห็นว่าคุณจะใช้กับsetCustomAnimations() FragmentTransactionสำหรับสถานการณ์สองส่วน (เช่นคุณเห็นเฉพาะ Fragment A ในตอนแรกและต้องการแทนที่ด้วย Fragment B ใหม่โดยใช้เอฟเฟกต์แบบเคลื่อนไหว) ฉันอยู่ในข้อตกลงที่สมบูรณ์ อย่างไรก็ตาม: เนื่องจากคุณสามารถระบุได้เพียงหนึ่งภาพเคลื่อนไหว "ใน" และ "ออก" หนึ่งภาพฉันไม่สามารถดูว่าคุณจะจัดการกับภาพเคลื่อนไหวต่าง ๆ …

5
Fragment หรือ Support Fragment?
ฉันกำลังพัฒนาแอพที่รองรับ Android> = 4.0 มันใช้ชิ้นส่วนจากandroid.appแพ็คเกจ ในขณะที่ฉันกำลังประสบปัญหากับการใช้งานแฟรกเมนต์รุ่นเก่าใน 4.0 เช่นนี้ซึ่งได้รับการแก้ไขแล้วในไลบรารีการสนับสนุนฉันกำลังพิจารณาเปลี่ยนกลับไปใช้การใช้งานแฟรกเมนต์จากไลบรารีการสนับสนุนเพื่อให้ได้การใช้งานที่เชื่อถือได้และสอดคล้องกันมากขึ้น คุณมีความคิดเห็นอย่างไรกับเรื่องนี้? คุณใช้ชิ้นส่วนจากไลบรารีการสนับสนุนแม้ว่าจะมีให้ใช้งานแล้วเมื่อพัฒนาสำหรับ Android 4

11
การเรียกใช้เมธอด Fragment จากกิจกรรมหลัก
ฉันเห็นในคู่มือนักพัฒนาAndroid Fragmentsว่า "กิจกรรมสามารถเรียกใช้เมธอดในแฟรกเมนต์ได้โดยรับการอ้างอิงถึง Fragment จาก FragmentManager โดยใช้findFragmentById()หรือfindFragmentByTag()" ตัวอย่างต่อไปนี้แสดงวิธีรับการอ้างอิงแฟรกเมนต์ แต่ไม่ใช่วิธีการเรียกใช้เมธอดเฉพาะในแฟรกเมนต์ ใครสามารถยกตัวอย่างวิธีการทำเช่นนี้? ฉันต้องการเรียกวิธีการเฉพาะใน Fragment จากกิจกรรมหลัก ขอบคุณ

7
ไม่เรียก FragmentPagerAdapter getItem
ฉันไม่สามารถนำ Fragment มาใช้ซ้ำใน FragmentPagerAdapter ได้ .. โดยใช้เมธอด destroyItem () มันกำลังลบแฟรกเมนต์ แต่ยังไม่เรียก getItem () อีก .. มีแค่ 2-3 ภาพดังนั้นฉันจึงใช้ FragmentPagerAdapter แทน FragmentStatePagerAdapter .. public class ExamplePagerAdapter extends FragmentPagerAdapter { ArrayList < String > urls; int size = 0; public ExamplePagerAdapter(FragmentManager fm, ArrayList < String > res) { super(fm); urls = res; …

5
runOnUiThread ในแฟรกเมนต์
ฉันกำลังพยายามแปลงกิจกรรมเป็นส่วนย่อย runOnUiThreadเครื่องหมายข้อผิดพลาดใน ในอดีต: GoogleActivityV2 ขยายจากกิจกรรม runOnUiThread ในคลาส ExecuteTask คลาส ExecuteTask ซ้อนอยู่บนกิจกรรม (รันตกลง) ตอนนี้: GoogleActivityV2 ขยายจาก Fragment runOnUiThread ในคลาส ExecuteTask คลาส ExecuteTask ซ้อนอยู่บนกิจกรรม (ข้อผิดพลาดใน runOnUiThread) นี่คือรหัสของฉัน public class GoogleActivityV2 extends SherlockMapFragment implements OnMapClickListener , OnMapLongClickListener , OnCameraChangeListener , TextWatcher { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View rootView …

12
วิธีล้างแถบการนำทางหลังจากนำทางไปยังส่วนอื่นใน Android
ฉันใช้ส่วนประกอบสถาปัตยกรรมการนำทางใหม่ใน Android และฉันติดอยู่ในการล้างสแต็กการนำทางหลังจากย้ายไปยังส่วนใหม่ ตัวอย่าง: ฉันอยู่ใน loginFragment และฉันต้องการให้ส่วนนี้ถูกล้างออกจากสแต็กเมื่อฉันไปที่โฮมแฟรกเมนต์เพื่อไม่ให้ผู้ใช้กลับไปที่ loginFragment เมื่อเขากดปุ่มย้อนกลับ ฉันใช้NavHostFragment.findNavController (Fragment) .navigate (R.id.homeFragment) อย่างง่ายเพื่อนำทาง รหัสปัจจุบัน: mAuth.signInWithCredential(credential) .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment); } else { Log.w(TAG, "signInWithCredential:failure", task.getException()); } } }); ฉันลองใช้NavOptionsในการนำทาง ()แต่ปุ่มย้อนกลับยังคงส่งฉันกลับไปที่ loginFragment NavOptions.Builder navBuilder = new NavOptions.Builder(); NavOptions navOptions …

9
ปัญหากับ Android Fragment back stack
ฉันมีปัญหาใหญ่เกี่ยวกับวิธีที่ส่วนแบ็คสแต็กของ Android ใช้งานได้และจะขอบคุณมากที่สุดสำหรับความช่วยเหลือใด ๆ ที่มีให้ ลองนึกภาพคุณมี 3 Fragments [1] [2] [3] ฉันต้องการให้ผู้ใช้จะสามารถนำทาง[1] > [2] > [3]แต่ในทางกลับ [3] > [1](กดปุ่มด้านหลัง) อย่างที่ฉันคิดไว้ว่าสิ่งนี้จะทำได้โดยการไม่โทรaddToBackStack(..)เมื่อสร้างธุรกรรมที่นำส่วน[2]เข้าสู่ตัวยึดส่วนที่กำหนดไว้ใน XML ความจริงของเรื่องนี้ดูเหมือนกับว่าว่าถ้าผมไม่ต้องการ[2]ที่จะปรากฏขึ้นอีกครั้งเมื่อผู้ใช้กดปุ่มย้อนกลับบน[3]ผมต้องไม่เรียกในการทำธุรกรรมที่ส่วนแสดงให้เห็นว่าaddToBackStack [3]สิ่งนี้ดูเหมือนจะสวนทางกันโดยสิ้นเชิง (อาจมาจากโลก iOS) อย่างไรก็ตามถ้าฉันทำแบบนี้เมื่อฉันไป[1] > [2]และกดกลับฉันก็กลับมา[1]ตามที่คาดไว้ ถ้าฉันไป[1] > [2] > [3]แล้วกดกลับฉันจะข้ามกลับไปที่[1](ตามที่คาดไว้) ตอนนี้พฤติกรรมแปลกที่เกิดขึ้นเมื่อฉันพยายามและข้ามไปอีกครั้งจาก[2] [1]ก่อนอื่น[3]จะแสดงสั้น ๆ ก่อนที่จะ[2]เข้าสู่มุมมอง หากฉันกดย้อนกลับที่จุดนี้[3]จะปรากฏขึ้นและหากฉันกดย้อนกลับอีกครั้งแอปจะออก ใครช่วยให้ฉันเข้าใจว่าเกิดอะไรขึ้นที่นี่? และนี่คือไฟล์ xml เลย์เอาต์สำหรับกิจกรรมหลักของฉัน: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" …

7
วงจรชีวิตของ Android Fragment เหนือการเปลี่ยนแปลงการวางแนว
การใช้แพ็คเกจความเข้ากันได้เพื่อกำหนดเป้าหมาย 2.2 โดยใช้ Fragments หลังจากเข้ารหัสกิจกรรมเพื่อใช้แฟรกเมนต์ในแอพแล้วฉันไม่สามารถรับการเปลี่ยนแปลงการวางแนว / การจัดการสถานะทำงานได้ดังนั้นฉันจึงสร้างแอพทดสอบขนาดเล็กที่มี FragmentActivity เดียวและ Fragment เดียว บันทึกจากการเปลี่ยนแปลงการวางแนวเป็นเรื่องแปลกโดยมีการเรียกหลายครั้งไปยังส่วน OnCreateView เห็นได้ชัดว่าฉันขาดอะไรบางอย่างเช่นการแยกชิ้นส่วนและติดตั้งใหม่แทนที่จะสร้างอินสแตนซ์ใหม่ แต่ฉันไม่เห็นเอกสารใด ๆ ที่จะระบุว่าฉันทำผิดพลาดตรงไหน ใครช่วยให้ความกระจ่างเกี่ยวกับสิ่งที่ฉันทำผิดที่นี่ได้โปรด ขอบคุณ บันทึกจะเป็นดังนี้หลังจากเปลี่ยนการวางแนว Initial creation 12-04 11:57:15.808: D/FragmentTest.FragmentTestActivity(3143): onCreate 12-04 11:57:15.945: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:57:16.081: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState null Orientation Change 1 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): onSaveInstanceState 12-04 11:57:39.031: D/FragmentTest.FragmentTestActivity(3143): onCreate 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView …


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