ฉันมีกิจกรรม 2 อย่างคือหลักและรายการ
จากหน้าหลักคุณสามารถเปิดรายการ จากรายการคุณสามารถเปิด Main
ฉันต้องการให้ทุกครั้งที่เปิดรายการไม่ได้รับการบันทึกลงใน 'ประวัติ' ดังนั้นการกดกลับจาก Main จึงไม่สามารถกลับไปที่ List
เป็นไปได้ไหม?
ฉันมีกิจกรรม 2 อย่างคือหลักและรายการ
จากหน้าหลักคุณสามารถเปิดรายการ จากรายการคุณสามารถเปิด Main
ฉันต้องการให้ทุกครั้งที่เปิดรายการไม่ได้รับการบันทึกลงใน 'ประวัติ' ดังนั้นการกดกลับจาก Main จึงไม่สามารถกลับไปที่ List
เป็นไปได้ไหม?
คำตอบ:
เมื่อเริ่มรายการของคุณActivity
ให้ตั้งค่าIntent
สถานะดังนี้:
Intent i = new Intent(...); // Your list's Intent
i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flag
startActivity(i);
FLAG_ACTIVITY_NO_HISTORY
ธงเก็บใหม่Activity
จากการเพิ่มไปยังกองประวัติศาสตร์
หมายเหตุ: ตามที่ @Sam ชี้ให้เห็นคุณสามารถใช้i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
แทนได้ ไม่มีความแตกต่างในการทำงาน
Intent
ธงที่ระบุว่า "เพิ่มในประวัติศาสตร์เท่านั้นหากไม่กลับไปที่Activity
ต้นกำเนิด"
ในไฟล์รายการเพิ่ม:
android:noHistory="true"
ไปยังกิจกรรมที่คุณไม่ต้องการเก็บไว้ในสแต็ก
ใช้งานใหม่ด้วยการหักบัญชี สิ่งนี้ใช้ได้ผลในกรณีของฉันเมื่อตัวเลือกอื่นไม่ได้
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
ดูเหมือนว่าถ้าคุณเรียกเสร็จสิ้น () ในกิจกรรมของคุณทันทีหลังจากที่คุณเปิดรายการอื่นสิ่งที่ทำเสร็จแล้วจะถูกลบออกจากสแต็ก
ตัวอย่างเช่น:
Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
ในกรณีเฉพาะของฉันFLAG_ACTIVITY_NO_HISTORY
ไม่ได้ผล ไม่ได้ทำงานด้วยตัวเองFLAG_ACTIVITY_NEW_TASK
หรือFLAG_ACTIVITY_CLEAR_TASK
คนเดียว
อย่างไรก็ตามFLAG_ACTIVITY_NEW_TASK
และFLAG_ACTIVITY_CLEAR_TASK
ร่วมกันได้ผล
Intent intent = new Intent(FooActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
คำตอบช้า แต่เพิ่มความลึกให้กับคำตอบอื่น ๆ ทั้งหมดนี้ขึ้นอยู่กับสิ่งที่คุณต้องการให้เกิดขึ้นกับกิจกรรมอื่น ๆ ที่เริ่มต้นจากกิจกรรมนั้น
ตัวเลือกที่ 1 - เพียงกิจกรรมเดียวนี้ไม่ควรมีประวัติการโทร
จากนั้นทำ:
Intent i = new Intent(...);
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
ตัวเลือกที่ 2 - กิจกรรมทั้งหมดที่เริ่มต้นจากกิจกรรมเฉพาะนั้นไม่ควรมีประวัติ
จากนั้นเพิ่มรายการของกิจกรรมการโทร:
android:noHistory="true"
แต่ถ้าคุณต้องการมีประวัติในกิจกรรมใหม่คุณต้องลบแฟล็กด้วยตนเอง:
Intent i = new Intent(...);
i.removeFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
หวังว่าจะกระจ่างคำตอบอื่น ๆ :)
แค่อยากจะเพิ่มวิธีทำใน Kotlin:
val i = Intent(this, LogInActivity::class.java)
startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
Intent(this, MainActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) }.also { startActivity(it) }
ลอง FLAG_ACTIVITY_CLEAR_TOP หากกิจกรรมกำลังทำงานอยู่:
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
เพิ่มธงFLAG_ACTIVITY_NEW_TASK
ลงในไฟล์Intent
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
คุณไม่สามารถลบล้างปุ่มย้อนกลับของกิจกรรมนั้น ๆ เพื่อหยุดการทำงานของ 'ส่งคืน' ได้หรือไม่?
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}
Activity
ถือเป็นแนวทางปฏิบัติที่ไม่ดี
OnBackPressed
ไว้เพื่อที่
finish()
ทันทีหลังจากstartActivity(...)
นั้น ด้วยวิธีนี้หากผู้ใช้กด BACK จาก 'main' จะไม่มีอะไรให้ย้อนกลับไป