làm thế nào để ghi đè nút quay lại thanh tác vụ trong Android?


95

Tôi muốn tùy chỉnh nút quay lại hoạt động trong thanh tác vụ, không phải trong nút quay lại trên phím cứng. Tôi đã ghi đè onBackPressed()phương thức. Nó hoạt động với nút quay lại trình giả lập của tôi, nhưng không hoạt động với nút quay lại trên thanh tác vụ.

Tôi muốn nó xảy ra với thanh tác vụ. Tôi có thể làm cái này như thế nào?

Đây là mã của tôi:

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
    return;
}

Tôi đã sử dụng bánh mì nướng này cho dù tính năng ép ngược có hoạt động hay không nhưng việc triển khai thực tế thay đổi như để quay lại hoạt động trước đó. Nhưng điều này không hoạt động với nút hiện diện trên đầu thanh tác vụ (bên cạnh tiêu đề của hoạt động).

Xin vui lòng bất kỳ ai có thể chỉ định cho tôi vấn đề.

Câu trả lời:


209

Tôi nghĩ bạn muốn ghi đè hoạt động nhấp của nút trang chủ. Bạn có thể ghi đè chức năng này như thế này trong hoạt động của mình.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
        break;
    }
    return true;
}

1
Noah Ibrahim, Trên thực tế có nút Quay lại ở góc trên bên trái giống như nút quay lại trong trình duyệt. Khi tôi nhấp vào nút đó, tôi muốn quay lại hoạt động trước đó. Không giống như mã bạn đã đăng ở trên.
GK

4
thêm super.onBackPressed (); với nó
redestructa

2
Điều này đã làm việc cho tôi sau khi tôi đổi return true;sang return super.onOptionsItemSelected(item). Sau đó, bạn có thể tạo ra điều gì đó xảy ra khi người dùng nhấp vào nút quay lại của thanh tác vụ, nhưng vẫn giữ nguyên chức năng của nút.
kumaheiyama

Bằng kỹ thuật này, nút mũi tên quay lại phản hồi muộn. Có nghĩa là tôi phải đợi một giây để kích hoạt sự kiện. Cũng không xuất hiện chọn vào nút này cho tác dụng khi bấm nó
Gopal Singh Sirvi

Không làm việc cho tôi. Khi tôi gỡ lỗi, tôi thấy id của nút trang chủ và id của nút được nhấp khác nhau.
viper

45

Nếu bạn muốn nút quay lại ActionBar hoạt động giống như nút quay lại phần cứng:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                    onBackPressed();
                    return true;
            }
            return false;
    }

1
trường hợp android.R.id.homekhông kích hoạt
Trancer

2
@Trancer nếu bạn sử dụng nó trong Fragment, bạn nên gọi thêm setHasOptionsMenu(true)trong onCreate đoạn của phương pháp
wilddev

10

Hai điều cần lưu ý là người dùng có thể nhấn nút quay lại hoặc nhấn nút trang chủ trên thanh tác vụ.
Vì vậy, nếu bạn muốn chuyển hướng anh ta đến cùng một điểm đến thì bạn có thể làm điều này.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return false;
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    startActivity(intent);
    finish();
}

Thao tác này sẽ đưa người dùng đến mục đích nhấn phím hoặc nút trên thanh tác vụ.


trường hợp android.R.id.homekhông kích hoạt
Trancer

@Trancer, Đã gần hơn 1,5 năm. Và tôi không làm android bây giờ. Tôi không thể giúp bạn bây giờ. Lấy làm tiếc.
ssi-anik

vậy giải pháp là gì?
GA1

7
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                case android.R.id.home:
                       finish();
                   break;
                }
                return true;
        }

2
Bạn có thể đã thêm nó như một bình luận. Nó ít nhiều giống với câu trả lời được chấp nhận.
Sufian

7

Rất tiếc, câu trả lời của tôi là một câu trả lời muộn, nhưng đối với bất kỳ ai khác truy cập trang này với cùng câu hỏi, tôi đã thử cách trên:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}

nhưng điều này không bắt được nút "Quay lại".

Cuối cùng, tôi đã tìm thấy một phương pháp phù hợp với mình trên https://stackoverflow.com/a/37185334/3697478 , đó là ghi đè "onSupportNavigateUp ()" khi tôi đang sử dụng thanh tác vụ từ thư viện hỗ trợ "AppCompatActivity". (Có một "onNavigateUp ()" tương đương cho thư viện thanh tác vụ / thanh công cụ mới hơn.)

@Override
public boolean onSupportNavigateUp(){  
  finish();  
  return true;  
}

và tôi đã xóa phần "android: parentActivityName =". MainActivity "khỏi tệp kê khai.


4

Tôi đã đạt được điều này, chỉ bằng hai bước,

Bước 1: Truy cập AndroidManifest.xml và thêm tham số trong thẻ - android: parentActivityName = ". Home.HomeActivity"

thí dụ :

 <activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

Bước 2: trong ActivityDetail, thêm hành động của bạn cho trang / hoạt động trước đó

thí dụ :

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
       case android.R.id.home:
           onBackPressed();
           return true;
    }
    return super.onOptionsItemSelected(item);
 }

2

Nếu bạn muốn quay lại phiên bản trước của một Activity bằng cách nhấn nút Home ActionBar mà không cần tạo lại nó, bạn có thể ghi đè phương thức getParentActivityIntent để sử dụng phương thức từ ngăn xếp phía sau:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
      return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}

CHỈNH SỬA:
Ngoài ra, bạn có thể đạt được kết quả tương tự bằng cách
đặt Chế độ khởi chạy của hoạt động mẹ của bạn thành singleTop.
Vì vậy, hãy đặt thành android:launchMode="singleTop"hoạt động chính trong tệp kê khai của bạn.
Hoặc bạn có thể sử dụng cờ FLAG_ACTIVITY_CLEAR_TOP với ý định LÊN.
tham khảo: Cung cấp điều hướng lên


2

(1) Thêm Hoạt động của cha mẹ cho hoạt động của con bạn (AndroidManifest.xml)

<activity
        android:name=".ParentActivity" />

(2) ghi đè phương thức onSupportNavigateUp bên trong hoạt động con

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return false;
}

0
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == android.R.id.home) {
        onBackPressed();
        return true;
    }
    //noinspection SimplifiableIfStatement
    if (id == R.id.signIn) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
///////////////////
@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

0

Có một số cách để thiết lập nút quay lại trên thanh:

1) phương thức .setDisplayHomeAsUpEnabled(true);sẽ làm điều đó và sau đó bạn có thể chỉ cần ghi đèandroid.R.id.home

2) thêm <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" />trong Android Manifest, nhưng trong trường hợp này, bạn không thể ghi đè android.R.id.hometrong OnOptionsMenuSelected.

.. cho những ai thắc mắc tại sao nó không hoạt động với họ ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.