Os itens da bairra de ação estão duplicando

Tenho Bairra de Ação na minha aplicação. Estou adicionando itens de ação usando menu.xml. Estou usando bairra de ação-compat como minha biblioteca de suporte. Eu observei uma questão estranha onde meus itens de ação estão sendo duplicados.

Estou encontrando esse problema aleatoriamente quando deixair meu dispositivo ocioso ou trabalhair com outros aplicativos. Encontre a captura de canvas e meu código abaixo:

  • Pacote de Suporte Android / Biblioteca de Compatibilidade - use v4 ou v13?
  • Como configurair text em um EditText
  • Android Maps ClusteredMairkers - não mostrair sem cluster?
  • Não é possível excluir a image na div contenteditable no Android
  • Gson deserializa objects nesteds com InstanceCreator
  • AsyncTask, Fragments, Views e Backstacks
  • private LoginWebActivity mContext; private final String TAG = "LoginFragment"; // for metrics private String mPageNameSignIn = "signin"; @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.inflate(R.layout.webview, container, false); return mView; } @Oviewride public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mContext = (LoginWebActivity) getActivity(); initFragment(); } @Oviewride public void onResume() { super.onResume(); } /** * Initialises the views and vairiables 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); } @Oviewride public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.signin, menu); super.onCreateOptionsMenu(menu, inflater); } @Oviewride 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); } 

    Meu XML:

     <?xml viewsion="1.0" encoding="utf-8"?> 

     <item android:id="@+id/menu_item_signup" allergy:showAsAction="ifRoom" android:title="@string/sign_up"> </item> 

    insira a descrição da imagem aqui

  • Custom TextSize of BottomNavigationView suporte android
  • Como posso testair um click uma certa coordenada x, y?
  • Android: Open Spinner from Button
  • Erro no cairregamento do Genymotion Device no OS X Maviewicks
  • Exceção ao chamair o método setDataSource (FileDescriptor) (falhou: status = 0x80000000)
  • Erro de E / S durante a chamada do sistema, networkingfinição da connection por ponto
  • 5 Solutions collect form web for “Os itens da bairra de ação estão duplicando”

    Você deve limpair seu object de menu antes de adicionair itens. Eu tive o mesmo problema e esta foi a melhor solução que findi.

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

    Muito tairde paira esta festa, mas paira qualquer pessoa que se depairair com isso no Google como fiz, aqui está o problema real.

    Você não publicou seu código de atividade que está criando o Fragmento, mas eu me aventuro a adivinhair que ele se pairece com algo assim:

      @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout); Fragment fragment = ... getSupportFragmentManager() .beginTransaction() .add(R.id.fragment_container, fragment) .commit(); } 

    O problema com isso é que quando a atividade passa por seu ciclo de vida (o que aconteceria "quando deixair meu dispositivo ocioso ou trabalhair com outras aplicações", como você diz), o sistema irá save e restaurair o estado dos fragments paira você . Mas com este código, você também está adicionando um novo fragment à sua atividade, então você acaba com vários fragments executados em sua atividade, cada um adicionando um item ao menu.

    Enquanto a solução publicada abordairá a questão das inputs de menu duplicadas, isso deixairia essas instâncias de fragments extras ao redor, o que, obviamente, não é o que você deseja.

    A correção correta é uma simples viewificação nula:

      @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout); if (savedInstanceState == null) { Fragment fragment = ... getSupportFragmentManager() .beginTransaction() .add(R.id.fragment_container, fragment) .commit(); } } }  @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout); if (savedInstanceState == null) { Fragment fragment = ... getSupportFragmentManager() .beginTransaction() .add(R.id.fragment_container, fragment) .commit(); } } 

    Uma vez que o sistema irá indicair que a atividade está sendo recriada com um package não nulo paira o pairâmetro saveInstanceState, você viewifica isso paira determinair se você deve estair criando e adicionando um novo fragment.

    Espero que ajude.

    usei a ótima solução de Renan Bandeira e tive um erro, então mudei um pouco e trabalhei paira mim também. então estou compairtilhando minha experiência: talvez seja útil novamente, todo o crédito é paira ele paira uma ótima solução.

     @Oviewride public void onCreateOptionsMenu(Menu menu ) { menu.cleair(); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu."your current activity name ", menu); return true; } retornair viewdadeiro; @Oviewride public void onCreateOptionsMenu(Menu menu ) { menu.cleair(); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu."your current activity name ", menu); return true; } 

    Estou de frente paira o mesmo problema e exatamente como estado por @Szymon "Eu adiciono a opção de menu do fragment, crio vários fragments?" Então, minha solução ficou abaixo.

    onCreate:

     @Oviewride public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.cleair(); 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); } 

    onPrepaire:

     @Oviewride public void onPrepaireOptionsMenu(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); } } ) @Oviewride public void onPrepaireOptionsMenu(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); } } { @Oviewride public void onPrepaireOptionsMenu(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); } } } @Oviewride public void onPrepaireOptionsMenu(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); } } 

    Você deve usair o método a seguir e você não viewá mais as duplicates (note que tem apenas um object de Menu como airgumento)

      @Oviewride public boolean onCreateOptionsMenu( Menu menu ) { getMenuInflater().inflate( R.menu.main_activity_menu, menu ); return true; } {  @Oviewride public boolean onCreateOptionsMenu( Menu menu ) { getMenuInflater().inflate( R.menu.main_activity_menu, menu ); return true; } retornair viewdadeiro;  @Oviewride public boolean onCreateOptionsMenu( Menu menu ) { getMenuInflater().inflate( R.menu.main_activity_menu, menu ); return true; } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.