Khi sử dụng Ngăn kéo Điều hướng, các nhà phát triển Android khuyến cáo rằng trong ActionBar "chỉ những màn hình được thể hiện trong Ngăn kéo Điều hướng mới thực sự có hình ảnh Ngăn kéo Điều hướng" và "tất cả các màn hình khác đều có carat truyền thống."
Xem tại đây để biết chi tiết: http://youtu.be/F5COhlbpIbY
Tôi đang sử dụng một hoạt động để kiểm soát nhiều cấp độ mảnh vỡ và có thể khiến hình ảnh Ngăn kéo Điều hướng hiển thị và hoạt động ở tất cả các cấp độ.
Khi tạo các đoạn ở mức thấp hơn, tôi có thể gọi ActionBarDrawerToggle
setDrawerIndicatorEnabled(false)
để ẩn hình ảnh Ngăn điều hướng và hiển thị dấu mũ lên
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag, "lowerFrag").addToBackStack(null).commit();
Vấn đề tôi gặp phải là khi tôi điều hướng trở lại các đoạn cấp cao nhất, Up carat vẫn hiển thị thay vì hình ảnh Ngăn kéo Điều hướng ban đầu. Bạn có đề xuất nào về cách "làm mới" ActionBar trên các đoạn cấp cao nhất để hiển thị lại hình ảnh Ngăn điều hướng không?
Giải pháp
Đề nghị của Tom làm việc cho tôi. Đây là những gì tôi đã làm:
Hoạt động chủ yêu
Hoạt động này kiểm soát tất cả các mảnh trong ứng dụng.
Khi chuẩn bị các đoạn mới để thay thế các đoạn khác, tôi đặt Ngăn kéo setDrawerIndicatorEnabled(false)
như thế này:
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag).addToBackStack(null).commit();
Tiếp theo, trong phần ghi đè onBackPressed
, tôi đã hoàn nguyên phần trên bằng cách đặt ngăn kéo cho phép setDrawerIndicatorEnabled(true)
như thế này:
@Override
public void onBackPressed() {
super.onBackPressed();
// turn on the Navigation Drawer image;
// this is called in the LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
Trong phần LowerLevelFragments
Trong các đoạn tôi đã sửa đổi onCreate
và onOptionsItemSelected
như thế này:
Trong onCreate
bổ sung setHasOptionsMenu(true)
để cho phép cấu hình trình đơn tùy chọn. Cũng được đặt setDisplayHomeAsUpEnabled(true)
để bật < trong thanh hành động:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// needed to indicate that the fragment would
// like to add items to the Options Menu
setHasOptionsMenu(true);
// update the actionbar to show the up carat/affordance
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
Sau đó, onOptionsItemSelected
bất cứ khi nào < được nhấn, nó sẽ gọi onBackPressed()
từ hoạt động để di chuyển lên một cấp trong cấu trúc phân cấp và hiển thị Hình ảnh ngăn kéo điều hướng:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
switch (item.getItemId()) {
case android.R.id.home:
//called when the up affordance/carat in actionbar is pressed
getActivity().onBackPressed();
return true;
…
}
.replace(R.id.frag_layout
. Nếu đây là một cấp bậc phân cấp nữa, tôi sẽ mong bạn đưa .add
nó vào backstack.
theDrawerToggle.setDrawerIndicatorEnabled(false);
các mảnh bên trong? Tôi nghĩ rằng nó được khai báo trong tệp lớp Hoạt động chính. Tôi không thể tìm thấy một cách để tham khảo này. Có gợi ý nào không?
setDisplayOptions()
phương thức trong ToolbarWidgetWrapper
(của gói android.support.v7.iternal.widget nội bộ) sẽ không tạo lại biểu tượng khi nhập cùng một đoạn lần thứ hai. Chỉ để lại ở đây khi người khác cũng vấp phải vấn đề này.