Trình nghe onClick của Action Bar cho nút Home


84

Làm cách nào để triển khai tùy chỉnh onClickListenercho nút Trang chủ của Thanh tác vụ?

Tôi đã làm một getSupportActionBar().setDisplayHomeAsUpEnabled(true);và bây giờ tôi muốn chuyển hướng người dùng đến một hoạt động nhất định trong trường hợp nút Trang chủ được nhấp.

Tôi đã thử với:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            item.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    Intent i = new Intent();
                    i.setClass(BestemmingActivity.this, StartActivity.class);
                    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                    return true;
                }
            });
        default:
            return super.onOptionsItemSelected(item);
        }
    }

nhưng nó không bao giờ đi vào onMenuItemClick.

Về cơ bản, nó được thực hiện giống như trong liên kết này nhưng nó vẫn không nhập vào trình nghe.

Câu trả lời:


112

nếu ai khác cần giải pháp

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home) {
        onBackPressed();  return true;
    }

    return super.onOptionsItemSelected(item);
}

đây phải là một sự thận trọng. câu trả lời tuyệt vời
jemsnaban

3
Làm việc cho tôi vớireturn true;
Rick

1
Đặt một return true;ở phần cuối của các ifkhối, thì đó là đúng
androidguy

2
Cách tiếp cận này không hoạt động đối với nút Trang chủ / Quay lại có biểu tượng mũi tên.
Trancer

111

Tôi sử dụng actionBarSherlock , sau khi thiết lập, supportActionBar.setHomeButtonEnabled(true);
chúng tôi có thể ghi đè phương thức onMenuItemSelected:

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
        toggle();

        // Toast.makeText(this, "home pressed", Toast.LENGTH_LONG).show();
        break;

    }

    return true;
}

Tôi hy vọng công việc này cho bạn ~~~ chúc may mắn


4
Không làm việc với tôi tôi. Không thể ghi đè onMenuItemSelected làm cuối cùng của nó.
Aritra Roy

Với chú thích android chỉ cần sử dụng @OptionsItem (android.R.id.home) public void yourMethod () {}
Italo Borssatto

23

nếu chúng tôi sử dụng hệ thống đưa ra thanh hành động sau mã hoạt động tốt

getActionBar().setHomeButtonEnabled(true);

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
      //do your action here.
        break;

    }

    return true;
}

7

Đã sửa: không cần sử dụng a setOnMenuItemClickListener. Chỉ cần nhấn nút, nó sẽ tạo và khởi chạy hoạt động thông qua ý định.

Cảm ơn rất nhiều mọi người đã giúp đỡ của bạn!


Đúng vậy, thanh tác vụ sẽ onOptionsItemSelected()tự động xử lý trình nghe và cuộc gọi . Không cần cài đặt thủ công (điều đó thực sự có thể phá vỡ mọi thứ).
Nikolay Elenkov

5

câu trả lời của một nửa những gì đang xảy ra. nếu onOptionsItemSelectedkhông phải homeAsUpnút điều khiển khi hoạt động của phụ huynh được đặt trong hệ thống tệp kê khai.xml chuyển sang hoạt động của phụ huynh. sử dụng như thế này trong thẻ hoạt động:

<activity ... >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" /> 
</activity>

3

Bạn cần bật rõ ràng hành động gia đình nếu chạy trên ICS. Từ các tài liệu :

Lưu ý: Nếu bạn đang sử dụng biểu tượng để điều hướng đến hoạt động gia đình, hãy lưu ý rằng bắt đầu với Android 4.0 (API cấp 14), bạn phải bật rõ ràng biểu tượng làm mục hành động bằng cách gọi setHomeButtonEnabled (true) (trong các phiên bản trước, biểu tượng được bật như một mục hành động theo mặc định).


3
Tôi đã làm một getSupportActionBar().setDisplayHomeAsUpEnabled(true);và mộtgetSupportActionBar().setHomeButtonEnabled(true);
noloman


-4

bạn nên xóa Ghi đè onOptionsItemSelected của mình và tạo lại onCreateOptionsMenu của bạn bằng mã này

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_action_bar_finish_order_stop, menu);
        menu.getItem(0).setOnMenuItemClickListener(new FinishOrderStopListener(this, getApplication(), selectedChild));
        return true;

    }

1
Vui lòng thêm một số giải thích để giúp mọi người hiểu và quay lại (quay lại?) Đọc các chính sách của stackoverflow về câu trả lời chỉ với mã.
N0un
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.