首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >操作栏项目正在复制

操作栏项目正在复制
EN

Stack Overflow用户
提问于 2013-11-05 18:55:42
回答 4查看 12K关注 0票数 23

我的应用程序中有Action Bar。我正在使用menu.xml添加行动项。我使用action bar-compat作为我的支持库。我发现了一个奇怪的问题,我的操作项被复制了。

当我的设备空闲或使用其他应用程序时,我会随机发现这个问题。请在下面找到截图和我的代码:

代码语言:javascript
复制
private LoginWebActivity mContext;
private final String TAG = "LoginFragment";

// for metrics
private String mPageNameSignIn = "signin";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mView = inflater.inflate(R.layout.webview, container, false);

    return mView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mContext = (LoginWebActivity) getActivity();
    initFragment();

}

@Override
public void onResume() {

    super.onResume();
}

/**
 * Initialises the views and variables of the fragment.
 */
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
protected void initFragment() {


    mWebView = (WebView) mView.findViewById(R.id.webView);
    Bundle b = mContext.getIntent().getExtras();
    if (b != null) {
        mUrl = b.getString(Constants.EXTRA_WEB_LOGIN_URL);
    }
    super.initFragment();

    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.signin, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Navigate
    switch (item.getItemId()) {
    case R.id.menu_item_signup:
        mContext.onSignUpClick();
        break;
    case android.R.id.home:
        if (!goBack())
            getActivity().finish();
    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}

我的XML:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>

代码语言:javascript
复制
<item
    android:id="@+id/menu_item_signup"
    allergy:showAsAction="ifRoom"
    android:title="@string/sign_up">
</item>

EN

回答 4

Stack Overflow用户

发布于 2013-12-04 17:27:52

在添加项目之前,必须清除菜单对象。我也有同样的问题,这是我找到的最好的解决方案。

代码语言:javascript
复制
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    menu.clear();
    inflater.inflate(R.menu.signin, menu);
    super.onCreateOptionsMenu(menu, inflater);
}
票数 67
EN

Stack Overflow用户

发布于 2014-07-01 20:29:13

我使用了Renan Bandeira的很好的解决方案,但我有一些错误,所以我对它做了一点修改,也为我自己工作。然后我分享我的经验:也许它再次变得有用,所有的功劳都归功于他的伟大解决方案。

代码语言:javascript
复制
@Override
    public void onCreateOptionsMenu(Menu menu ) {
       menu.clear();
       MenuInflater inflater = getMenuInflater();    
       inflater.inflate(R.menu."your current activity name ", menu);
    return true;
}
票数 4
EN

Stack Overflow用户

发布于 2015-09-10 02:37:09

我面临着同样的问题,正如@Szymon所说的:“我从片段中添加菜单选项,我创建了多个片段?”因此,我的解决方案如下所示。

onCreate:

代码语言:javascript
复制
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    menu.clear();
    inflater.inflate(R.menu.menu, menu);
    menu.findItem(R.id.action_one).setVisible(true);
    menu.findItem(R.id.action_two).setVisible(false);
    super.onCreateOptionsMenu(menu, inflater);
}

onPrepare:

代码语言:javascript
复制
@Override
public void onPrepareOptionsMenu(Menu menu) {
    if (isAdded()
            && !isDetached()
            && isVisible()
            && !isRemoving()
            )
    {
        // show the menu
        if (menu.findItem(R.id.action_one).isVisible())
            menu.findItem(R.id.action_one).setVisible(true);
        // hide the menu
        if (menu.findItem(R.id.action_two).isVisible())
            menu.findItem(R.id.action_two).setVisible(false);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19787318

复制
相关文章

相似问题

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