6

Tôi có một lớp ActivityDrawerLayout. Bố cục đó hiển thị danh sách trong Ngăn kéo và cho phép người dùng chuyển đổi giữa fragments. Trong các Fragments này, có một số URL và khi người dùng clicsk trên đó, một WebviewFragment sẽ được hiển thị. Tuy nhiên, tôi không muốn hiển thị số DrawerLayout trong số WebViewFragment. Thay vào đó, tôi muốn người dùng sẽ được chuyển hướng đến Fragment trước đó.Hiện/Ẩn DrawerLayout phụ thuộc vào phân đoạn hiện tại

Có cách nào để tôi hiển thị/ẩn số DrawerLayout phụ thuộc vào những gì hiện tại Fragment là? Tôi cố gắng gọi mDrawerLayout.setVisibility(View.GONE), nhưng có vẻ như nó chưa hoàn chỉnh. Ít nhất biểu tượng ActionBar vẫn là biểu tượng ngăn kéo.

Trả lời

18

Bạn có thể sử dụng phương pháp này để khóa hoặc mở khóa ngăn kéo: DrawerLayout.setDrawerLockMode(...). (Ngoài ra còn có hai phiên bản khác của phương pháp này để chỉ định chế độ khóa cho ngăn kéo cụ thể.) Để khóa, hãy sử dụng DrawerLayout.LOCK_MODE_LOCKED_CLOSED; để mở khóa, hãy sử dụng DrawerLayout.LOCK_MODE_UNLOCKED.

Nếu bạn đang sử dụng ActionBarDrawerToggle, bạn cần phải thêm một số mã phụ để ngăn ngăn mở khi chúng nhấp vào ActionBarDrawerToggle nếu bạn đã khóa ngăn kéo.

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // check lock mode before passing to ActionBarDrawerToggle 
    // I assume your drawer is on the left; if not, use Gravity.RIGHT 
    int lockMode = mDrawer.getDrawerLockMode(Gravity.LEFT); 
    if (lockMode == DrawerLayout.LOCK_MODE_UNLOCKED && 
      mDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    // Handle your other action bar items... 

    return super.onOptionsItemSelected(item); 
} 
+0

nhưng biểu tượng điều hướng trong thanh tác vụ vẫn ở đây ... – Bear

+3

Thử phương thức 'ActionBarDrawerToggle.setDrawerIndicatorEnabled()' – Karakuri

1

Tại sao không mở một Hoạt động mới chỉ có một WebView làm nội dung thay thế? Sau đó, người dùng sẽ phải nhấn nút quay lại để quay lại Activity với DrawerLayout, và sau đó sẽ không có vấn đề gì.

Ngoài ra, bạn không cần phải có một hoạt động như vậy chính mình, bạn có thể cho Android tìm một trình duyệt cho họ để mở thay vì sử dụng mã này:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("HTTP_URL_GOES_HERE")); 
startActivity(intent); 
+0

1. Thực ra, tôi không chắc chắn khi nào nên bắt đầu một hoạt động mới và khi nào cần thêm phân đoạn vào hậu trường. Nhưng tôi nghĩ rằng cho thấy một mảnh có ít chi phí hơn (thời gian tải ít hơn coompared để bắt đầu một hoạt động mới) Từ sự hiểu biết của tôi, nhiều ứng dụng chỉ có một MainActivity và nhiều mảnh. 2. Nhiều ứng dụng có WebViewFragment/WebViewActivity của riêng nó để hiển thị một trang web đơn giản. Vì không muốn người dùng rời khỏi ứng dụng. – Bear

+0

Hiển thị một Hoạt động mới sẽ không mất nhiều thời gian hơn việc tạo Phân đoạn mới. Tôi nghĩ trong thực tế thời gian tải sẽ phụ thuộc nhiều hơn vào thời gian tải trang web. Nếu bạn muốn giữ lại suer trong ứng dụng của mình, chỉ cần di chuyển mã từ đoạn WebView của bạn đến một Activity và sử dụng nó. Hoặc xem câu trả lời khác của tôi để gắn bó với cách tiếp cận hiện tại của bạn. – Karakuri

Các vấn đề liên quan