ฉันต้องการทำสิ่งที่ง่าย ๆ บนแอพ Android เป็นไปได้อย่างไรที่จะกลับไปทำกิจกรรมก่อนหน้า
ฉันต้องใช้รหัสใดเพื่อย้อนกลับไปยังกิจกรรมก่อนหน้า
ฉันต้องการทำสิ่งที่ง่าย ๆ บนแอพ Android เป็นไปได้อย่างไรที่จะกลับไปทำกิจกรรมก่อนหน้า
ฉันต้องใช้รหัสใดเพื่อย้อนกลับไปยังกิจกรรมก่อนหน้า
คำตอบ:
กิจกรรม Android จะถูกเก็บไว้ในกองกิจกรรม การกลับไปทำกิจกรรมก่อนหน้าอาจหมายถึงสองสิ่ง
คุณเปิดกิจกรรมใหม่จากกิจกรรมอื่นที่มีstartActivityForResult ในกรณีนี้คุณสามารถเรียกใช้ฟังก์ชัน finishActivity ()จากโค้ดของคุณและจะนำคุณกลับไปที่กิจกรรมก่อนหน้า
ติดตามสแต็กกิจกรรม เมื่อใดก็ตามที่คุณเริ่มต้นเป็นกิจกรรมใหม่ที่มีความตั้งใจที่คุณสามารถระบุธงเจตนาเหมือนหรือFLAG_ACTIVITY_REORDER_TO_FRONT
FLAG_ACTIVITY_PREVIOUS_IS_TOP
คุณสามารถใช้สิ่งนี้เพื่อสลับระหว่างกิจกรรมในแอปพลิเคชันของคุณ ยังไม่ได้ใช้พวกเขามากนัก ดูที่ธงที่นี่: http://developer.android.com/reference/android/content/Intent.html
ตามที่ระบุไว้ในความคิดเห็นที่ถ้ากิจกรรมเปิดด้วยแล้วหนึ่งสามารถปิดมันด้วยstartActivity()
finish()
หากคุณต้องการใช้ปุ่มขึ้นคุณสามารถตรวจจับได้onOptionsSelected(MenuItem item)
ด้วยวิธีการตรวจสอบ ID รายการandroid.R.id.home
ไม่เหมือนR.id.home
ที่กล่าวไว้ในความคิดเห็น
ลองActivity#finish()
ดู นี่คือสิ่งที่ปุ่มย้อนกลับทำขึ้นโดยค่าเริ่มต้น
this.finish();
#
เป็นตัวบ่งชี้ที่finish()
เป็นวิธีที่ไม่คงที่ของคลาสกิจกรรม มันไม่ถูกต้อง Java แต่มันช่วยอธิบายวิธีหนึ่งอาจใช้วิธีการ
.
เช่น:Activity.someStaticMethod()
แค่นี้
super.onBackPressed();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
สิ่งนี้จะนำคุณไปยังกิจกรรมก่อนหน้านี้เพื่อเก็บสแต็กและล้างกิจกรรมทั้งหมดหลังจากสแต็กจากสแต็ก
ตัวอย่างเช่นหาก stack เป็น A-> B-> C-> D และคุณเริ่มต้น B ด้วยการตั้งค่าสถานะนี้ stack จะเป็น A-> B
คุณต้องการควบคุมพฤติกรรมปุ่มย้อนกลับหรือไม่? คุณสามารถแทนที่ปุ่มย้อนกลับ (เพื่อไปยังกิจกรรมที่เฉพาะเจาะจง) ผ่านหนึ่งในสองวิธี
สำหรับ Android 1.6 และต่ำกว่า:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
return true;
}
return super.onKeyDown(keyCode, event);
}
หรือถ้าคุณสนับสนุน Android 2.0 หรือสูงกว่าเท่านั้น:
@Override
public void onBackPressed() {
// do something on back.
return;
}
สำหรับรายละเอียดเพิ่มเติม: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html
เพียงแค่เรียกวิธีการเหล่านี้เพื่อทำกิจกรรมปัจจุบันให้เสร็จหรือกลับไปที่กดแบ็ค
finish();
หรือ
onBackPressed();
ถ้าคุณต้องการที่จะไปเพียงแค่ต้องการที่จะไปใช้กิจกรรมก่อนหน้านี้
finish();
หรือ
onBackPressed();
หากคุณต้องการไปที่กิจกรรมที่สองหรือต่ำกว่าที่ใช้ดังต่อไปนี้:
intent = new Intent(MyFourthActivity.this , MySecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//Bundle is optional
Bundle bundle = new Bundle();
bundle.putString("MyValue1", val1);
intent.putExtras(bundle);
//end Bundle
startActivity(intent);
เพิ่มในวิธี onCLick () ของคุณมันจะกลับไปที่กิจกรรมก่อนหน้าของคุณ
เสร็จสิ้น();
หรือคุณสามารถใช้สิ่งนี้ มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
หากคุณตั้งค่าไฟล์ AndroidManifest.xml อย่างถูกต้องกับพาเรนต์กิจกรรมคุณสามารถใช้:
NavUtils.navigateUpFromSameTask(this);
กิจกรรมนี้เป็นกิจกรรมลูกของคุณ
ลองทำสิ่งนี้ตามที่คุณต้องกดปุ่มย้อนกลับ
finish();
onBackPressed();
คุณสามารถโทรอย่างชัดเจนonBackPressed
เป็นวิธีที่ง่ายที่สุด
อ้างอิงกลับไปที่กิจกรรมก่อนหน้านี้เพื่อดูรายละเอียด
มีปัญหาเดียวกันและ
finish(); OR super.onBackPressed();
ทำงานได้ดีสำหรับฉันทั้งสองทำงานเหมือนกัน แต่ไม่มีโชคด้วย return
เริ่มกิจกรรมที่สองโดยใช้ความตั้งใจ (ใช้startActivity
หรือstartActivityForResult
ตามความต้องการของคุณ) ตอนนี้เมื่อผู้ใช้กดปุ่มย้อนกลับกิจกรรมปัจจุบันที่ด้านบนจะถูกปิดและก่อนหน้านี้จะปรากฏขึ้น
ตอนนี้ให้บอกว่าคุณมีสองกิจกรรมหนึ่งกิจกรรมสำหรับเลือกการตั้งค่าบางอย่างสำหรับผู้ใช้เช่นภาษาประเทศ ฯลฯ และหลังจากเลือกแล้วผู้ใช้คลิกที่ปุ่มถัดไปเพื่อไปที่แบบฟอร์มการเข้าสู่ระบบ (ตัวอย่าง) ตอนนี้หากการเข้าสู่ระบบไม่สำเร็จผู้ใช้จะเข้าสู่กิจกรรมการเข้าสู่ระบบจะเกิดอะไรขึ้นหากการเข้าสู่ระบบสำเร็จ
หากการเข้าสู่ระบบสำเร็จคุณต้องเริ่มกิจกรรมใหม่ หมายถึงกิจกรรมที่สามจะเริ่มขึ้นและยังคงมีกิจกรรมสองกิจกรรมที่ดำเนินการอยู่ ในกรณีนี้มันจะใช้งานstartActivityForResult
ได้ดี เมื่อล็อกอินสำเร็จให้ส่งข้อมูล OK กลับไปที่กิจกรรมแรกและปิดกิจกรรมเข้าสู่ระบบ ตอนนี้เมื่อได้รับข้อมูลจากนั้นเริ่มกิจกรรมที่สามและปิดกิจกรรมแรกโดยใช้เสร็จสิ้น
คุณสามารถลองสิ่งนี้:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
กิจกรรม / ความตั้งใจใหม่โดยค่าเริ่มต้นจะมีพฤติกรรมย้อนหลัง / ก่อนหน้าเว้นแต่ว่าคุณได้เขียนรหัสfinish()
เกี่ยวกับกิจกรรมการโทร
@Override
public void onBackPressed() {
super.onBackPressed();
}
และถ้าคุณต้องการที่ปุ่มคลิกย้อนกลับไปแล้วก็ใส่
bbsubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
ลองนี้มันทำงานได้ทั้งบนปุ่มแถบเครื่องมือด้านหลังเป็นปุ่มฮาร์ดแวร์กลับ
ฉันขอแนะนำ NavUtils.navigateUpFromSameTask () มันง่ายและง่ายมากคุณสามารถเรียนรู้ได้จากนักพัฒนาของ Google ที่ฉันสามารถช่วยคุณได้!
มีบางกรณีที่จะกลับไปทำกิจกรรมก่อนหน้าของคุณ:
กรณีที่ 1:หากคุณต้องการให้ผลลัพธ์กลับไปที่กิจกรรมก่อนหน้าของคุณแล้วละ ActivityA.java
Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
startActivityForResult(intent,2);
FBHelperActivity.java
Intent returnIntent = new Intent();
setResult(RESULT_OK, returnIntent);
finish();
กรณีที่ 2: ActivityA -> FBHelperActivity ----> ActivityA
ActivityA.java
Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
startActivity(intent);
FBHelperActivity.java
after getting of result call finish();
By this way your second activity will finish and because
you did not call finish() in your first activity then
automatic first activity is in back ground, will visible.
หลังจากนั้นคุณมีสองวิธีในการย้อนกลับจากกิจกรรมปัจจุบันไปยังกิจกรรมก่อนหน้า:
เพียงโทร: finish()
ภายใต้ฟังคลิกปุ่มหรือแทนที่วิธีการต่อไปนี้เพื่อกลับมาใช้ปุ่มย้อนกลับระบบ:
@Override
public void onBackPressed() {
super.onBackPressed();
}
นอกจากคำตอบทั้งหมดที่กล่าวมาแล้วพวกเขายังคงเป็นทางเลือกในการทำสิ่งนี้สมมติว่าคุณมีสองคลาสคลาส A และคลาส B
คลาส A ที่คุณทำกิจกรรมบางอย่างเช่นเลือกกล่องกาเครื่องหมายพิมพ์ข้อมูลบางอย่างและตั้งใจที่จะคลาส B คลาส B คุณต้องการส่งผ่านค่าหลายค่าไปยังคลาส A และรักษาสถานะก่อนหน้าของคลาส A คุณสามารถใช้ลองทางเลือกนี้ วิธีการหรือดาวน์โหลดซอร์สโค้ดเพื่อสาธิตสิ่งนี้
หรือ
http://developer.android.com/reference/android/content/Intent.html
เพียงลองสิ่งนี้ในกิจกรรมแรก
Intent mainIntent = new Intent(Activity1.this, Activity2.class);
this.startActivity(mainIntent);
ในกิจกรรมที่สองของคุณ
@Override
public void onBackPressed() {
this.finish();
}