invalidateOptionsMenu在片段中不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
}
}
}
但是动作项目从未出现过
答案
要更新片段内的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);
}
}
以上是关于invalidateOptionsMenu在片段中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
适用于 API < 11 的 Android invalidateOptionsMenu()
使用 invalidateOptionsMenu() 打开/关闭 NavDrawer 会导致对 SearchView 和 onQueryTextChange 的 onRestore 调用也被调用