首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >invalidateOptionsMenu在片段中不起作用

invalidateOptionsMenu在片段中不起作用
EN

Stack Overflow用户
提问于 2014-08-09 14:23:04
回答 3查看 24.8K关注 0票数 24

我想根据编辑文本中的文字显示或隐藏动作栏中的项目

因此,我做了以下工作

代码语言:javascript
运行
复制
            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永远不会出现

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-09 14:57:17

为了更新片段中的onCreateOptionsMenu,您需要在片段的onCreate方法中调用setHasOptionsMenu(true);。否则,在调用getActivity().invalidateOptionsMenu();时将无法对其进行更新

示例:

代码语言:javascript
运行
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

编辑:

代码语言:javascript
运行
复制
@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);


}
票数 75
EN

Stack Overflow用户

发布于 2014-08-09 14:58:09

试试这个:

代码语言:javascript
运行
复制
@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);
    }
}
票数 10
EN

Stack Overflow用户

发布于 2020-06-30 16:59:47

解决方案1

这是在片段中工作

代码语言:javascript
运行
复制
 getActivity().invalidateOptionsMenu();

解决方案2

如果上述代码不起作用,请尝试此操作

代码语言:javascript
运行
复制
invalidateOptionsMenu(getActivity());

导入此库

代码语言:javascript
运行
复制
import static androidx.core.app.ActivityCompat.invalidateOptionsMenu;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25215853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档