2015-02-11 103 views
0

我有3个Fragments,并在Fragment3我想在我的ActionBar显示一个图标,这是工作正常,但当我做回其他碎片像片段1和Fragment2图标留visible(true) 我试着在片段的添加item.setVisible(false),但不起作用,图标保持显示在别人身上Fragments按钮在ActionBar设置可见性?

我该如何解决?

XML

<item 
    android:id="@+id/action_chat" 
    android:icon="@drawable/batalha_icon_chat" 
    android:title="Chat" 
    app:showAsAction="ifRoom" 
    android:visible="true" 
    /> 

片段

public class Fragment3 extends Fragment implements View.OnClickListener { 
    private Menu mMenu; 

@Override 
    public void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.battle_chat, menu); 
    mMenu = menu; 
    MenuItem mi = mMenu.findItem(R.id.action_chat); 
    if(this.isVisible()){ 
     Log.i("VISIBLE->", "true"); 
     mi.setVisible(true); 
    }else{ 
     Log.i("VISIBLE->", "false"); 
     mi.setVisible(false); 
    } 
    super.onCreateOptionsMenu(menu, inflater); 
} 


@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_chat: 
       Fragment frag = new HelloBubblesActivity(); 
       FragmentTransaction ft = getFragmentManager().beginTransaction(); 
       ft.replace(R.id.fl, frag,"HelloBubblesActivity");  
       ft.commit(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 


@Override 
    public void onPause() { 
     super.onPause(); 
    //API 9 
    getActivity().supportInvalidateOptionsMenu(); 
} 
+0

是否调用了onPause实际的beign? (我不这么认为)在“... setvisible”之上放置一个日志或烤面包来追踪它。 – 2015-02-11 11:49:03

回答

1

你需要调用:invalidateOptionsMenu(); 这将调用onCreateOptionsMenu()

+0

我确实改变了我的帖子'onCreateOptionsMenu'和'onPause',但不起作用。任何想法 ? – FernandoPaiva 2015-02-11 12:13:59

+0

当您输入片段时,将菜单项始终设置为不可见,并将其设置为可见。这应该工作。 – 2015-02-11 12:18:25

+0

无效我需要在ActionBarActivity内或在我的Fragment3中做到这一点? – FernandoPaiva 2015-02-11 12:54:15