คำถามติดแท็ก back-stack

"แบ็คสแต็ก" คือกลุ่มที่จัดเรียงกิจกรรมภายในงาน Android งาน Android คือชุดของกิจกรรมที่ผู้ใช้โต้ตอบเมื่อทำงานบางอย่าง โดยผ่านกิจกรรมกระบวนการนี้จะถูกวางไว้บนสแต็กตามลำดับที่เปิดแต่ละกิจกรรม สามารถเข้าถึงกิจกรรมได้ในภายหลังตามลำดับย้อนกลับโดยกดปุ่ม "ย้อนกลับ"

13
ล้างสแต็กประวัติทั้งหมดและเริ่มกิจกรรมใหม่บน Android
เป็นไปได้หรือไม่ที่จะเริ่มกิจกรรมบนสแต็กทำการล้างประวัติทั้งหมดก่อนหน้า สถานการณ์ ฉันมีกิจกรรมสแต็กที่ไป A-> B-> C หรือ B-> C (หน้าจอ A เลือกโทเค็นผู้ใช้ แต่ผู้ใช้จำนวนมากมีโทเค็นเดียวเท่านั้น) ในหน้าจอ C ผู้ใช้อาจดำเนินการซึ่งทำให้หน้าจอ B ไม่ถูกต้องดังนั้นแอปพลิเคชันต้องการนำพวกเขาไปที่หน้าจอ A ไม่ว่าจะอยู่ในสแต็กหรือไม่ก็ตาม หน้าจอ A ควรเป็นรายการเดียวในสแต็กในแอปพลิเคชันของฉัน หมายเหตุ มีคำถามที่คล้ายกันอื่น ๆ อีกมากมาย แต่ฉันไม่พบสิ่งใดที่ตอบคำถามตรงนี้ ฉันพยายามโทรgetParent().finish()- ซึ่งจะส่งผลให้เกิดข้อยกเว้นตัวชี้โมฆะเสมอ FLAG_ACTIVITY_CLEAR_TOPใช้งานได้เฉพาะถ้ากิจกรรมอยู่ในสแต็กแล้ว

11
โปรแกรมย้อนกลับไปที่แฟรกเมนต์ก่อนหน้านี้ในแบ็คสแต็ค
ว่าฉันมีกิจกรรมที่มีส่วนเพิ่มทางโปรแกรม: private void animateToFragment(Fragment newFragment, String tag) { FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.fragment_container, newFragment, tag); ft.addToBackStack(null); ft.commit(); } วิธีที่ดีที่สุดในการกลับไปยังส่วนก่อนหน้านี้ที่มองเห็นคืออะไร? ฉันพบฟังก์ชันการทำงานของปุ่มย้อนกลับบนปุ่มคลิกใน Androidแต่ฉันคิดว่าการจำลองเหตุการณ์ปุ่มย้อนกลับไม่ใช่วิธีที่เหมาะสมในการดำเนินการ (และฉันไม่สามารถทำให้มันทำงานได้): dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); การโทรfinish()เพิ่งปิดกิจกรรมที่ฉันไม่สนใจ มีวิธีที่ดีกว่าที่จะไปเกี่ยวกับเรื่องนี้?

13
จะป้องกันการกลับไปทำกิจกรรมก่อนหน้าได้อย่างไร?
เมื่อกดปุ่ม BACK บนโทรศัพท์ฉันต้องการป้องกันกิจกรรมบางอย่างไม่ให้กลับไปที่กิจกรรมก่อนหน้า โดยเฉพาะฉันมีหน้าจอเข้าสู่ระบบและลงทะเบียนทั้งสองเริ่มกิจกรรมใหม่ที่เรียกว่าHomeScreenเมื่อประสบความสำเร็จเข้าสู่ระบบ / สมัครสมาชิกเกิดขึ้น เมื่อหน้าจอเริ่มต้นขึ้นฉันต้องการป้องกันไม่ให้ผู้ใช้สามารถกลับไปที่หน้าจอเข้าสู่ระบบหรือลงทะเบียนโดยกดปุ่ม BACK ฉันลองใช้Intent.FLAG_ACTIVITY_NO_HISTORYแต่เนื่องจากแอปพลิเคชันมีการรวม Facebook เมื่อมีการใช้ 'เข้าสู่ระบบด้วย Facebook' Facebook ควรกลับไปที่หน้าจอเข้าสู่ระบบเริ่มต้นดังนั้นฉันควรเก็บประวัติกิจกรรมเหล่านี้ไว้ ฉันคิดว่าจะเอาชนะพฤติกรรมของปุ่ม BACK HomeScreenเพื่อสิ้นสุดแอปพลิเคชันโดยตรงเมื่อกดปุ่มและใช้งาน @Override public void onBackPressed() { finish(); } แต่นั่นก็ไม่ได้ผลเช่นกัน

18
Fragment onResume () & onPause () ไม่ได้ถูกเรียกบน backstack
ฉันมีหลายส่วนในกิจกรรม บนปุ่มคลิกฉันกำลังเริ่มแฟรกเมนต์ใหม่เพิ่มลงในแบ็คสแต็ค ฉันคาดว่าจะมีonPause()วิธีการเรียกแฟรกเมนต์ปัจจุบันและonResume()แฟรกเมนต์ใหม่ที่เกิดขึ้นตามธรรมชาติ มันไม่ได้เกิดขึ้น LoginFragment.java public class LoginFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = inflater.inflate(R.layout.login_fragment, container, false); final FragmentManager mFragmentmanager = getFragmentManager(); Button btnHome = (Button)view.findViewById(R.id.home_btn); btnHome.setOnClickListener(new View.OnClickListener() { public void onClick(View view){ HomeFragment fragment = new HomeFragment(); FragmentTransaction ft2 …

13
ฉันจะรักษาสถานะแฟรกเมนต์ได้อย่างไรเมื่อเพิ่มไปยังสแต็กหลัง?
ฉันเขียนกิจกรรมจำลองที่สลับระหว่างสองชิ้น เมื่อคุณไปจาก FragmentA ถึง FragmentB FragmentA จะถูกเพิ่มเข้าไปในกองหลัง อย่างไรก็ตามเมื่อฉันกลับไปที่ FragmentA (โดยกดปุ่มย้อนกลับ) FragmentA ใหม่ทั้งหมดจะถูกสร้างขึ้นและสถานะจะหายไป ฉันรู้สึกว่าฉันอยู่หลังสิ่งเดียวกันกับคำถามนี้แต่ฉันได้รวมตัวอย่างโค้ดที่สมบูรณ์เพื่อช่วยขจัดปัญหา: public class FooActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(android.R.id.content, new FragmentA()); transaction.commit(); } public void nextFragment() { final FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(android.R.id.content, new FragmentB()); transaction.addToBackStack(null); transaction.commit(); …

6
วิธีการคืนค่า Fragment จาก BackStack หากมีอยู่
ฉันกำลังเรียนรู้วิธีใช้ชิ้นส่วนต่างๆ ฉันมีสามกรณีของการFragmentเริ่มต้นที่ด้านบนของชั้นเรียน ฉันกำลังเพิ่มส่วนในกิจกรรมเช่นนี้: การประกาศและการเริ่มต้น: Fragment A = new AFragment(); Fragment B = new BFragment(); Fragment C = new CFragment(); การเปลี่ยน / เพิ่ม: FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.content_frame, A); ft.addToBackStack(null); ft.commit(); ตัวอย่างเหล่านี้ทำงานอย่างถูกต้อง ทุกส่วนจะถูกแนบกับกิจกรรมและถูกบันทึกลงในกองหลังโดยไม่มีปัญหาใด ๆ ดังนั้นเมื่อผมเปิดA, Cแล้วB, สแต็คลักษณะเช่นนี้ | | |B| |C| |A| ___ และเมื่อฉันกดปุ่ม 'ย้อนกลับ' BถูกทำลายและCกลับมาทำงานต่อ แต่เมื่อฉันเปิดใช้แฟรกเมนต์Aเป็นครั้งที่สองแทนที่จะกลับมาทำงานต่อจากสแต็กหลังจะถูกเพิ่มที่ด้านบนของสแต็กหลัง | | |A| |C| …

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" …

11
วิธีป้องกันหลายอินสแตนซ์ของกิจกรรมเมื่อเปิดตัวด้วย Intent ที่แตกต่างกัน
ฉันพบข้อบกพร่องในแอปพลิเคชันของฉันเมื่อเปิดตัวโดยใช้ปุ่ม"เปิด"บนแอป Google Play Store (ก่อนหน้านี้เรียกว่า Android Market) ดูเหมือนว่าการเปิดตัวจาก Play Store จะใช้วิธีที่แตกต่างIntentจากการเปิดใช้งานจากเมนูไอคอนแอปพลิเคชันของโทรศัพท์ ซึ่งนำไปสู่การเปิดตัวกิจกรรมเดียวกันหลายชุดซึ่งขัดแย้งกัน ตัวอย่างเช่นหากแอปของฉันประกอบด้วยกิจกรรม ABC ปัญหานี้อาจนำไปสู่ ​​ABCA หลายชุด ฉันพยายามใช้android:launchMode="singleTask"กับกิจกรรมทั้งหมดเพื่อแก้ไขปัญหานี้ แต่มีผลข้างเคียงที่ไม่ต้องการจากการล้างสแต็กกิจกรรมไปยังรูทเมื่อใดก็ตามที่ฉันกดปุ่ม HOME พฤติกรรมที่คาดไว้คือ: ABC -> HOME -> และเมื่อแอปได้รับการกู้คืนฉันต้องการ: ABC -> HOME -> ABC มีวิธีที่ดีในการป้องกันการเรียกใช้กิจกรรมประเภทเดียวกันหลายรายการโดยไม่ต้องรีเซ็ตเป็นกิจกรรมรูทเมื่อใช้ปุ่ม HOME หรือไม่?

17
Android: ลบกิจกรรมก่อนหน้านี้ทั้งหมดออกจากกองหลัง
เมื่อฉันคลิกที่ปุ่มออกจากระบบในกิจกรรมโปรไฟล์ของฉันฉันต้องการนำผู้ใช้ไปที่หน้าเข้าสู่ระบบซึ่งเขาต้องใช้ข้อมูลรับรองใหม่ ดังนั้นฉันจึงใช้รหัสนี้: Intent intent = new Intent(ProfileActivity.this, LoginActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); ในonButtonClickปุ่ม Logout แต่ปัญหาคือเมื่อฉันคลิกปุ่มย้อนกลับอุปกรณ์บนกิจกรรมการเข้าสู่ระบบระบบจะพาฉันไปที่ ProfileActivity ฉันคาดว่าแอปพลิเคชันควรปิดเมื่อฉันกดปุ่มย้อนกลับของอุปกรณ์บน LoginActivity ผมทำอะไรผิดหรือเปล่า? ฉันยังเพิ่มandroid:launchMode="singleTop"ในรายการสำหรับLoginActivityของฉันด้วย ขอบคุณ

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();

17
รับชิ้นส่วนล่าสุดใน backstack
ฉันจะเพิ่มอินสแตนซ์แฟรกเมนต์ล่าสุดในแบ็คสแต็กได้อย่างไร (หากฉันไม่รู้จักแฟรกเมนต์แท็ก & id) FragmentManager fragManager = activity.getSupportFragmentManager(); FragmentTransaction fragTransacion = fragMgr.beginTransaction(); /****After add , replace fragments (some of the fragments are add to backstack , some are not)***/ //HERE, How can I get the latest added fragment from backstack ??

12
Fragments onResume จาก back stack
ฉันใช้แพ็คเกจความเข้ากันได้เพื่อใช้ Fragments กับ Android 2.2 เมื่อใช้แฟรกเมนต์และเพิ่มการเปลี่ยนระหว่างพวกมันไปที่แบ็คสแต็กฉันต้องการให้เกิดพฤติกรรมเดียวกันของ onResume ของกิจกรรมนั่นคือเมื่อใดก็ตามที่แฟรกเมนต์ถูกนำไปที่ "โฟร์กราวด์" (ผู้ใช้มองเห็นได้) หลังจากที่โผล่ออกมาจาก backstack ฉันต้องการให้มีการเปิดใช้งานการโทรกลับบางประเภทภายในส่วน (เพื่อทำการเปลี่ยนแปลงบางอย่างในทรัพยากร UI ที่แชร์เป็นต้น) ฉันเห็นว่าไม่มีการเรียกกลับภายในกรอบส่วนย่อย มีแนวทางปฏิบัติที่ดีเพื่อให้บรรลุเป้าหมายนี้หรือไม่?

10
Android: เปิดกิจกรรมโดยไม่บันทึกลงในสแต็ก
ฉันมีกิจกรรม 2 อย่างคือหลักและรายการ จากหน้าหลักคุณสามารถเปิดรายการ จากรายการคุณสามารถเปิด Main ฉันต้องการให้ทุกครั้งที่เปิดรายการไม่ได้รับการบันทึกลงใน 'ประวัติ' ดังนั้นการกดกลับจาก Main จึงไม่สามารถกลับไปที่ List เป็นไปได้ไหม?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.