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

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

9
ความแตกต่างระหว่าง onCreateView และ onViewCreated ใน Fragment
อะไรคือความแตกต่างที่สำคัญระหว่างสองวิธีนี้? เมื่อฉันสร้าง TextView ฉันควรใช้อันอื่นเพื่อประสิทธิภาพหรือไม่? แก้ไข: อะไรคือความแตกต่างจาก onCreateView() { root = some view View v = new View(some context); root.add(v); return root; } onViewCreated() { View v = new View(some context); getView().add(v); }

2
อะไรคือความแตกต่างระหว่างการถอด Fragment และการลบ?
ในเอกสาร Android สำหรับFragmentTransactionฉันสังเกตเห็นสองวิธีที่คล้ายกันมาก: detachและremove. คำอธิบายที่นั่นดูเหมือนจะไม่ให้ข้อมูลเชิงลึกมากนักเกี่ยวกับเวลาที่จะใช้แต่ละข้อและจากสิ่งที่ฉันสามารถบอกได้ว่าดูเหมือนจะเหมือนกัน ดังนั้น: อะไรคือความแตกต่างระหว่างสองวิธีนี้?

3
Android Fragments: ควรใช้ซ่อน / แสดงหรือเพิ่ม / ลบ / แทนที่เมื่อใด
สมมติว่าฉันต้องการแทนที่ส่วนปัจจุบันในมุมมองคอนเทนเนอร์บางส่วนด้วยอีกมุมมองหนึ่ง ใช้แทนดีกว่าไหม ... FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.fragment_container, newFragment, null); ft.commit(); ... หรือต่อไปนี้กับ show and hide? FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.hide(oldFragment); ft.show(newFragment); ft.commit(); วิธีหนึ่งในการดำเนินการนี้มีประสิทธิภาพมากขึ้นหรือไม่? ไม่พบข้อมูลมากนักว่าเมื่อใดควรใช้วิธีการเหล่านี้หรือผลกระทบต่อวงจรชีวิตของชิ้นส่วนที่เกี่ยวข้องอย่างไร ขอบคุณ!

12
ตั้งค่าธีมสำหรับ Fragment
ฉันกำลังพยายามตั้งค่าธีมสำหรับส่วนย่อย การตั้งค่าธีมในรายการไม่ทำงาน: android:theme="@android:style/Theme.Holo.Light" จากการดูบล็อกก่อนหน้านี้ดูเหมือนว่าฉันต้องใช้ ContextThemeWrapper มีใครแนะนำตัวอย่างโค้ดให้ฉันได้ไหม ฉันไม่พบอะไรเลย

5
แนวทางปฏิบัติที่ดีที่สุดสำหรับชิ้นส่วนที่ซ้อนกันใน Android 4.0, 4.1 (<4.2) โดยไม่ต้องใช้ไลบรารีการสนับสนุน
ฉันกำลังเขียนแอปสำหรับแท็บเล็ต 4.0 และ 4.1 ซึ่งฉันไม่ต้องการใช้ไลบรารีสนับสนุน (หากไม่จำเป็น) แต่ใช้เฉพาะ 4.x api เท่านั้น ดังนั้นแพลตฟอร์มเป้าหมายของฉันจึงถูกกำหนดไว้อย่างดีเช่น:&gt; = 4.0 และ &lt;= 4.1 แอปมีเค้าโครงหลายบานหน้าต่าง (สองส่วนเล็ก ๆ ทางซ้ายหนึ่งชิ้นส่วนเนื้อหาทางด้านขวา) และแถบการดำเนินการที่มีแท็บ คล้ายกับสิ่งนี้: การคลิกแท็บบนแถบการดำเนินการจะเปลี่ยนแฟรกเมนต์ 'ด้านนอก' จากนั้นแฟรกเมนต์ด้านในจะเป็นแฟรกเมนต์ที่มีแฟรกเมนต์ที่ซ้อนกันสองชิ้น (1. แฟรกเมนต์รายการเล็กทางซ้าย 2. แฟรกเมนต์เนื้อหากว้าง) ตอนนี้ฉันสงสัยว่าแนวทางปฏิบัติที่ดีที่สุดในการเปลี่ยนชิ้นส่วนและชิ้นส่วนที่ซ้อนกันโดยเฉพาะอย่างยิ่งคืออะไร ViewPager เป็นส่วนหนึ่งของไลบรารีการสนับสนุนไม่มีทางเลือก 4.x ดั้งเดิมสำหรับคลาสนี้ ดูเหมือนว่า 'เลิกใช้แล้ว' ในความหมายของฉัน - http://developer.android.com/reference/android/support/v4/view/ViewPager.html จากนั้นฉันอ่านบันทึกประจำรุ่นสำหรับ Android 4.2 เกี่ยวกับChildFragmentManagerซึ่งน่าจะเหมาะสม แต่ฉันกำหนดเป้าหมายเป็น 4.0 และ 4.1 ดังนั้นจึงไม่สามารถใช้ได้เช่นกัน ChildFragmentManager มีเฉพาะใน …

6
วิธีการย้อนกลับภาพเคลื่อนไหว Fragment บน BackStack
ฉันคิดว่าระบบจะย้อนกลับภาพเคลื่อนไหวบนแบ็คสแต็คเมื่อกดปุ่มย้อนกลับเมื่อใช้ชิ้นส่วนโดยใช้รหัสต่อไปนี้: FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out); ft.replace(R.id.viewContainer, new class(), "layout").addToBackStack(null).commit();

13
PreferenceFragmentCompat ต้องการการตั้งค่า PreferenceTheme
ด้วย PreferenceFragmentCompat ใหม่จาก v7 Preference Support Library: http://developer.android.com/tools/support-library/features.html#v7-preferenceฉันได้รับข้อผิดพลาดนี้ E java.lang.IllegalStateException: Must specify preferenceTheme in theme E at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:202) ควรตั้งธีมอะไร อัปเดต:ฉันได้ลองใช้ไฟล์ &lt;item name="preferenceTheme"&gt;@style/PreferenceThemeOverlay&lt;/item&gt; ตามคำแนะนำของ @Bogato แต่มันดูไม่ถูกต้องและดูโฮโลมากแม้แต่ใน Lollipop ห้องสมุดสนับสนุน: ค่ากำหนดดั้งเดิม:

13
NullPointerException เข้าถึงมุมมองใน onCreate ()
นี่เป็นคำถามที่ยอมรับได้สำหรับปัญหาที่มักโพสต์บน StackOverflow ฉันกำลังติดตามบทแนะนำ ฉันได้สร้างกิจกรรมใหม่โดยใช้วิซาร์ด ฉันจะได้รับNullPointerExceptionเมื่อพยายามที่จะเรียกวิธีการในViews รับกับในกิจกรรมของฉันfindViewById()onCreate() กิจกรรมonCreate(): @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View something = findViewById(R.id.something); something.setOnClickListener(new View.OnClickListener() { ... }); // NPE HERE if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } XML เค้าโครง ( fragment_main.xml): &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" …

17
RecyclerView กะพริบหลังจากแจ้งเตือน
ฉันมี RecyclerView ซึ่งโหลดข้อมูลบางส่วนจาก API รวมถึง URL รูปภาพและข้อมูลบางส่วนและฉันใช้ networkImageView เพื่อโหลดรูปภาพ @Override public void onResponse(List&lt;Item&gt; response) { mItems.clear(); for (Item item : response) { mItems.add(item); } mAdapter.notifyDataSetChanged(); mSwipeRefreshLayout.setRefreshing(false); } นี่คือการใช้งานสำหรับ Adapter: public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) { if (isHeader(position)) { return; } // - get element from your dataset at …


15
รีเฟรช Fragment เมื่อโหลดซ้ำ
ในแอปพลิเคชัน Android ฉันกำลังโหลดข้อมูลจาก Db เข้าไปTableViewในไฟล์Fragment. แต่เมื่อฉันโหลดซ้ำFragmentมันจะแสดงข้อมูลก่อนหน้านี้ ฉันสามารถเติมFragmentข้อมูลใหม่ด้วยข้อมูลปัจจุบันแทนข้อมูลก่อนหน้าได้หรือไม่

13
รับข้อผิดพลาด“ Java.lang.IllegalStateException Activity ถูกทำลาย” เมื่อใช้แท็บกับ ViewPager
ฉันมีแอปพลิเคชันที่ประกอบด้วยการใช้ ActionBarSherlock ในโหมดแท็บฉันมี 5 แท็บและจัดการเนื้อหาของแต่ละแท็บโดยใช้ชิ้นส่วน สำหรับ tab2 ฉันมีแฟรกเมนต์ไฟล์ xml ซึ่งมีองค์ประกอบ ViewPager ซึ่งจะมีเพจแฟรกเมนต์บางเพจ เมื่อฉันเริ่มต้นแอปพลิเคชันแอปพลิเคชันฉันสามารถสลับไปมาระหว่างแท็บได้โดยไม่มีปัญหา แต่เมื่อฉันกด tab2 เป็นครั้งที่สองฉันได้รับข้อผิดพลาดดังกล่าวข้างต้น กิจกรรมหลักมีดังนี้: public class MainActivity extends SherlockFragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getSupportActionBar(); ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1"); ActionBar.Tab tab3 = actionBar.newTab().setText("Tab3"); ActionBar.Tab tab2 = actionBar.newTab().setText("Tab2"); ActionBar.Tab tab4 = …

16
วิธีส่งค่าระหว่าง Fragments
ฉันค่อนข้างใหม่กับการใช้ Fragments ฉันแค่พยายามสร้างแอปพลิเคชันตัวอย่างง่ายๆที่ใช้ Fragments สถานการณ์ของฉันคือฉันมีสองกิจกรรมโดยมีหนึ่งส่วนในแต่ละกิจกรรม ส่วนแรกมีข้อความแก้ไขและปุ่ม ส่วนที่สองมีมุมมองข้อความ เมื่อฉันป้อนชื่อในข้อความแก้ไขและคลิกที่ปุ่ม textview ในส่วนที่สองควรแสดงชื่อที่ป้อนในข้อความแก้ไขของส่วนแรก ฉันสามารถส่งค่าจากส่วนแรกไปยังกิจกรรมของมันแล้วจากกิจกรรมนั้นไปยังกิจกรรมที่สอง ตอนนี้ฉันจะใช้ค่านี้ภายในส่วนที่สองได้อย่างไร นี่คือรหัส Java ::: package com.example.fragmentexample; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class Fragment_1 extends Fragment{ OnFragmentChangedListener mCallback; // Container …

13
สนับสนุน FragmentPagerAdapter มีการอ้างอิงถึงแฟรกเมนต์เก่า
ข้อมูลล่าสุด: ฉันได้ จำกัด ปัญหาของฉันให้แคบลงจนเป็นปัญหากับ fragmentManager ที่เก็บอินสแตนซ์ของแฟรกเมนต์เก่าและ viewpager ของฉันไม่ซิงค์กับ FragmentManager ของฉัน เห็นปัญหานี้ ... http://code.google.com/p/android/issues/detail?id=19211#makechanges ฉันยังไม่ทราบวิธีแก้ปัญหานี้ ข้อเสนอแนะใด ๆ ... ฉันพยายามแก้ไขข้อบกพร่องนี้มานานแล้วและความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก ฉันใช้ FragmentPagerAdapter ซึ่งยอมรับรายการชิ้นส่วนดังนี้: List&lt;Fragment&gt; fragments = new Vector&lt;Fragment&gt;(); fragments.add(Fragment.instantiate(this, Fragment1.class.getName())); ... new PagerAdapter(getSupportFragmentManager(), fragments); การนำไปใช้เป็นมาตรฐาน ฉันใช้ไลบรารีการคำนวณ ActionBarSherlock และ v4 สำหรับ Fragments ปัญหาของฉันคือหลังจากออกจากแอปและเปิดแอปพลิเคชั่นอื่น ๆ และกลับมาส่วนย่อยจะสูญเสียการอ้างอิงกลับไปที่ FragmentActivity (เช่นgetActivity() == null) ฉันไม่สามารถเข้าใจได้ว่าเหตุใดจึงเกิดขึ้น ฉันพยายามตั้งค่าด้วยตนเองsetRetainInstance(true);แต่ไม่ได้ผล …

3
ความเข้าใจเพิ่มเติม setRetainInstance (true)
สิ่งที่ว่าเกิดขึ้นเมื่อคุณโทรsetRetainInstance(true)บนFragment? เอกสารนั้นแทบไม่มีอยู่จริงและดูเหมือนว่าเป็นหน้าที่ที่สำคัญมาก โดยเฉพาะฉันต้องการทราบว่าลำดับนี้ (ที่ฉันสร้างขึ้น) เป็นจริงมากแค่ไหน: ผู้ใช้หมุนเครื่อง ส่วนที่แยกออกจากActivityและFragment.onDetach()ถูกเรียก กิจกรรมถูกทำลาย Activity.onDestroy()ถูกเรียก. Activityวัตถุ Java เป็นลบ (เมื่อเป็นไปได้โดยการ GC) สร้างActivityวัตถุ java ใหม่ ตัวสร้างและonCreate()เรียกว่า ในActivity.onCreate()เรามีsetContentView(...)ซึ่งกำหนดเลย์เอาต์ที่มีแฟรกเมนต์หรือใช้FragmentTransaction เพื่อเพิ่มแฟรกเมนต์ ฉันไม่แน่ใจเกี่ยวกับเรื่องนี้จริงๆ แต่ฉันคิดว่า android ฉลาดพอที่จะค้นหาชิ้นส่วนเก่าและโทรหาFragment.onAttach()เพื่อแนบกลับเข้าไปใหม่Activity ถัดไป (หรือก่อนหน้านี้ใครจะรู้?) Activity.onResume()เรียกว่า ถูกต้องหรือไม่? Android ฉลาดพอที่จะค้นหาชิ้นส่วนเก่าแม้ว่าฉันจะใช้FragmentTransaction.add(new MyFragment(), ...)ครั้งแรกอย่างชัดเจนหรือไม่ และถ้าเป็นเช่นนั้นฉันจะหลีกเลี่ยงการเพิ่มส่วนอื่นในได้onCreate()อย่างไร ฉันต้องทำสิ่งนี้หรือไม่: if (getSupportFragmentManager().findFragmentByTag("foo") == null) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.add(new FooFragment(), "foo").commit(); }

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