InvalidateOptionsMenu не работает во фрагменте

Я хочу показать или скрыть элемент в панели действий в соответствии с их текстом в тексте редактирования или нет

Поэтому я сделал следующее

public class NounSearch extends android.app.Fragment { EditText seachEditText; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); View rootView = inflater.inflate(R.layout.nounsearchactivity, container, false); //Intiate EditText seachEditText =(EditText) rootView.findViewById(R.id.nounSearch); seachEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { searchResult.Entities = new ArrayList<NounModel>(); _currentPage = 0; categoryId = -1; new GetNouns().execute(); return true; } return false; } }); seachEditText.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { getActivity().invalidateOptionsMenu(); } }); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); if(seachEditText.getText().toString().length() > 0) { menu.findItem(R.id.action_search).setVisible(true); } else { menu.findItem(R.id.action_search).setVisible(false); } } } 

Но actionitem никогда не появляется

Solutions Collecting From Web of "InvalidateOptionsMenu не работает во фрагменте"

Для обновления onCreateOptionsMenu внутри фрагмента вам нужно вызвать setHasOptionsMenu(true); Внутри метода onCreate фрагмента без него вы не сможете обновить его при вызове getActivity().invalidateOptionsMenu();

образец:

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

РЕДАКТИРОВАТЬ:

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { if(seachEditText.getText().toString().length() > 0) { menu.findItem(R.id.action_search).setVisible(true); } else { menu.findItem(R.id.action_search).setVisible(false); } super.onCreateOptionsMenu(menu, inflater); } 

Попробуй это:

 @Override public boolean onPrepareOptionsMenu(Menu menu, MenuInflater inflater) { super.onPrepareOptionsMenu(menu, inflater); if (seachEditText.getText().toString().length() > 0) { menu.findItem(R.id.action_search).setVisible(true); } else { menu.findItem(R.id.action_search).setVisible(false); } }