2012-01-27 30 views
35

Vì vậy, đó là những gì tôi muốn biết. Làm thế nào tôi có thể thiết lập khả năng hiển thị của menu một cách có lập trình trong Android ?? Đây là cách tôi có trình đơn của tôi:Đặt hiển thị trong Menu lập trình android

public boolean onCreateOptionsMenu(Menu menu){ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

public boolean onOptionsItemSelected (MenuItem item){ 
    switch (item.getItemId()){ 
     case R.id.menuregistrar: 
      break; 
     case R.id.menusalir: 
      break; 
    } 
    return true; 
} 

Nhưng mã này không nằm trong onCreate, vì vậy tôi không biết làm thế nào để thiết lập một mục hiển thị hoặc ẩn lập trình (trong trường hợp của tôi, tôi muốn "menuregistrar" . là vô hình khi tôi đã đăng ký ứng dụng của tôi và mãi mãi

Trả lời

106

Đặt phương pháp này trong thư mục Activity

public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    MenuItem register = menu.findItem(R.id.menuregistrar);  
    if(userRegistered) 
    {   
     register.setVisible(false); 
    } 
    else 
    { 
     register.setVisible(true); 
    } 
    return true; 
} 

trong phiên bản ngắn hơn bạn có thể viết:

MenuItem register = menu.findItem(R.id.menuregistrar);  
register.setVisible(!userRegistered); //userRegistered is boolean, pointing if the user has registered or not. 
return true; 
+0

+1 cho câu trả lời tốt đẹp ... – Lucifer

+2

Hai lời khuyên: 1.you có thể thắt chặt mà lên bằng cách viết 'đăng ký. setVisible (userNotRegistered); '2. Các biến Boolean thường là tích cực tức là' if (! userRegistered) '. 'nếu (! UsersNotRegistered)' rất khó hiểu: nếu người dùng KHÔNG được đăng ký? –

+1

@ W.K.S đã đồng ý. cảm ơn cho bình luận. –

2

Sử dụng public boolean onPrepareOptionsMenu (Menu menu) nó được gọi là mọi lúc bạn nhấn nút menu và thực hiện công cụ của bạn ở đó. hoặc sử dụng oncreateoptionsmenu() của bạn trong các hoạt động khác nhau để thổi phồng các menu khác nhau - trình đơn này chỉ được gọi một lần.

Cheers

+1

onPrepareOptionsMenu cũng được gọi là bất cứ lúc nào bạn gọi invalidateOptionsMenu, vì vậy nó có thể được gọi nhiều lần. – javahead76

+0

@ javahead76 cuộc gọi này sẽ chỉ hoạt động nếu 'Build.VERSION.SDK_INT> = 11' –

6

tôi sẽ đơn giản hóa giải pháp Adil thậm chí hơn nữa với những điều sau đây:

public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    MenuItem registrar = menu.findItem(R.id.menuregistrar);  
    registrar.setVisible(!isRegistered); 
    return true; 
} 
+1

Tốt, nhưng một số người dùng mới sẽ không nhận được, vì họ đang vội vàng và muốn giải quyết vấn đề đó, vì vậy tôi đã chi tiêu nó cho thấy những gì đang thực sự xảy ra ở đó. :) –

+1

@AdilSoomro, mã này đơn giản hơn (và thuận tiện hơn nếu "chúng vội vàng") so với câu trả lời của bạn, vì vậy tôi khuyên bạn nên chỉnh sửa câu trả lời gốc. – Stan

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