Tôi muốn làm một cái gì đó đơn giản trên ứng dụng Android. Làm thế nào có thể quay trở lại một hoạt động trước đó.
Tôi cần mã gì để quay lại hoạt động trước
Tôi muốn làm một cái gì đó đơn giản trên ứng dụng Android. Làm thế nào có thể quay trở lại một hoạt động trước đó.
Tôi cần mã gì để quay lại hoạt động trước
Câu trả lời:
Các hoạt động của Android được lưu trữ trong ngăn xếp hoạt động. Quay trở lại một hoạt động trước đó có thể có nghĩa là hai điều.
Bạn đã mở hoạt động mới từ một hoạt động khác với startActivityForResult . Trong trường hợp đó, bạn chỉ có thể gọi hàm finishActivity () từ mã của mình và nó sẽ đưa bạn trở lại hoạt động trước đó.
Theo dõi ngăn xếp hoạt động. Bất cứ khi nào bạn bắt đầu một hoạt động mới với một ý định, bạn có thể chỉ định một cờ ý định như FLAG_ACTIVITY_REORDER_TO_FRONT
hoặc FLAG_ACTIVITY_PREVIOUS_IS_TOP
. Bạn có thể sử dụng điều này để xáo trộn giữa các hoạt động trong ứng dụng của bạn. Không sử dụng chúng nhiều mặc dù. Hãy xem các cờ ở đây: http://developer.android.com/reference/android/content/Intent.html
Như đã đề cập trong các ý kiến, nếu hoạt động được mở bằng startActivity()
thì người ta có thể đóng nó với finish()
. Nếu bạn muốn sử dụng nút Lên, bạn có thể bắt gặp onOptionsSelected(MenuItem item)
phương pháp đó bằng cách kiểm tra ID mục android.R.id.home
không giống R.id.home
như được đề cập trong các nhận xét.
Hãy thử Activity#finish()
. Đây là ít nhiều những gì nút quay lại làm theo mặc định.
this.finish();
#
là một chỉ báo finish()
là một phương thức không tĩnh của lớp Activity. Nó không hợp lệ với Java, nhưng nó giúp giải thích cách người ta có thể sử dụng phương thức này.
.
, tức là:Activity.someStaticMethod()
Chỉ cần viết vào nhấp kết thúc () . Nó sẽ đưa bạn đến Hoạt động trước đó.
Chỉ cái này
super.onBackPressed();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Điều này sẽ đưa bạn đến một hoạt động trước đó giữ ngăn xếp của nó và xóa tất cả các hoạt động sau khi nó từ ngăn xếp.
Ví dụ: nếu ngăn xếp là A-> B-> C-> D và bạn bắt đầu B với cờ này, ngăn xếp sẽ là A-> B
Bạn có muốn kiểm soát hành vi nút quay lại? Bạn có thể ghi đè nút quay lại (để chuyển đến một hoạt động cụ thể) thông qua một trong hai phương pháp.
Dành cho Android 1.6 trở xuống:
@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);
}
Hoặc nếu bạn chỉ hỗ trợ Android 2.0 trở lên:
@Override
public void onBackPressed() {
// do something on back.
return;
}
Để biết thêm chi tiết: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html
Chỉ cần gọi các phương thức này để kết thúc hoạt động hiện tại hoặc quay lại bằng onBackPression
finish();
HOẶC LÀ
onBackPressed();
nếu bạn muốn đi chỉ muốn đi đến hoạt động trước đó sử dụng
finish();
HOẶC LÀ
onBackPressed();
nếu bạn muốn đi đến hoạt động thứ hai hoặc bên dưới, hãy sử dụng như sau:
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);
Thêm cái này vào phương thức onCLick () của bạn, nó sẽ quay trở lại hoạt động trước đó của bạn
hoàn thành();
hoặc Bạn có thể sử dụng này. Nó làm việc hoàn hảo cho tôi
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
Nếu bạn đã thiết lập chính xác tệp AndroidManifest.xml có cha mẹ hoạt động, bạn có thể sử dụng:
NavUtils.navigateUpFromSameTask(this);
Đây là hoạt động của con bạn.
Hãy thử điều này là hành động như bạn phải nhấn nút quay lại
finish();
onBackPressed();
Bạn có thể gọi một cách rõ ràng onBackPressed
là cách dễ nhất
Tham khảo Quay lại hoạt động trước để biết chi tiết
Bắt đầu hoạt động thứ hai bằng cách sử dụng ý định (sử dụng startActivity
hoặc startActivityForResult
theo yêu cầu của bạn). Bây giờ khi người dùng nhấn nút quay lại, hoạt động hiện tại ở trên cùng sẽ bị đóng và trước đó sẽ được hiển thị.
Bây giờ Hãy nói rằng bạn có hai hoạt động, một để chọn một số cài đặt cho người dùng, như ngôn ngữ, quốc gia, v.v. và sau khi chọn, người dùng nhấp vào nút Tiếp theo để đi đến biểu mẫu đăng nhập (ví dụ). Bây giờ nếu đăng nhập không thành công, thì người dùng sẽ tham gia vào hoạt động đăng nhập, nếu đăng nhập thành công thì sao?
Nếu đăng nhập thành công, sau đó bạn phải bắt đầu một hoạt động khác. Nó có nghĩa là một hoạt động thứ ba sẽ được bắt đầu, và vẫn còn hai hoạt động đang chạy. Trong trường hợp này, nó sẽ tốt để sử dụng startActivityForResult
. Khi đăng nhập thành công, hãy gửi dữ liệu OK trở lại hoạt động đầu tiên và đóng hoạt động đăng nhập. Bây giờ khi dữ liệu được nhận, sau đó bắt đầu hoạt động thứ ba và đóng hoạt động đầu tiên bằng cách sử dụng kết thúc.
@Override
public void onBackPressed() {
super.onBackPressed();
}
và nếu bạn muốn nhấn vào nút, hãy quay lại
bbsubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
Có một vài trường hợp để quay lại hoạt động trước đó của bạn:
Trường hợp 1: nếu bạn muốn đưa kết quả trở lại hoạt động trước đó thì ActivityA.java
Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
startActivityForResult(intent,2);
FBHelperActivity.java
Intent returnIntent = new Intent();
setResult(RESULT_OK, returnIntent);
finish();
Trường hợp 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.
Sau đó, bạn có hai cách để quay lại hoạt động hiện tại sang hoạt động trước đó:
Chỉ cần gọi: finish()
bên dưới bấm vào nút nghe, hoặc Ghi đè phương thức sau để quay lại bằng nút quay lại hệ thống:
@Override
public void onBackPressed() {
super.onBackPressed();
}
Bên cạnh tất cả các câu trả lời được đề cập, chúng vẫn là một cách khác để làm điều này, giả sử bạn có hai lớp, lớp A và lớp B.
Lớp A bạn đã thực hiện một số hoạt động như chọn hộp kiểm, in ra một số dữ liệu và ý định đến lớp B. Lớp B, bạn muốn chuyển nhiều giá trị cho lớp A và duy trì trạng thái trước của lớp A, bạn có thể sử dụng, thử phương án này phương pháp hoặc tải mã nguồn để chứng minh điều này
hoặc là
http://developer.android.com/reference/android/content/Intent.html
Chỉ cần thử điều này trong, hoạt động đầu tiên
Intent mainIntent = new Intent(Activity1.this, Activity2.class);
this.startActivity(mainIntent);
Trong hoạt động thứ hai của bạn
@Override
public void onBackPressed() {
this.finish();
}