Programatically fuego barra de acción elemento de menú en Android

Tengo la barra de acción con el artículo de menú en la barra. Cuando hago clic en el icono de actualización tengo un método que muestra la barra de progreso.

Me gustaría hacer la carga de esta actividad. Por lo tanto, traté de llamar el ítem de actualización de icono de programaticamente:

onOptionsItemSelected(menu.findItem(R.id.action_Refresh)); 

Estoy llamando a lo anterior después de crear el menú.

Pero esto da una excepción de puntero nulo al cargar mis datos. Si hago clic en el botón de actualización está funcionando bien, pero si lo llamo por programación, obtengo un error.

Esto es lo que tengo:

  @Override public boolean onCreateOptionsMenu(Menu menu) { this.optionsMenu = menu; getMenuInflater().inflate(R.menu.main, menu); onOptionsItemSelected(menu.findItem(R.id.action_Refresh)); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_about: aboutapp(); return true; case R.id.action_Refresh: Log.e("REfressh","Clicked"); Mapsthree.refreshValue = 0; timer = new Timer(); timerMethod(); setRefreshActionButtonState(true); displayView(1); return true; default: return super.onOptionsItemSelected(item); } } private void timerMethod() { timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { updateProgressBar(); } }, 0, 800); } private void updateProgressBar() { runOnUiThread(new Runnable() { public void run() { if (Maps.refreshValue == 1) { setRefreshActionButtonState(false); timer.purge(); timer.cancel(); } } }); } public void setRefreshActionButtonState(final boolean refreshing) { if (optionsMenu != null) { final MenuItem refreshItem = optionsMenu.findItem(R.id.action_Refresh); if (refreshItem != null) { if (refreshing) { refreshItem.setActionView(R.layout.actionbar_indeterminate_progress); } else { refreshItem.setActionView(null); } } } } 

¿Es posible llamar a un elemento de menú mediante programación? ¿si es así, cómo?

¡Gracias!

¿Por qué lo llama desde onCreateOptionsMenu ?

Puede escribir el código para cargar en el método onCreate o onResume dependiendo del requisito:

 @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); //whatever you are doing //now code for refresh Log.e("REfressh","First time"); Mapsthree.refreshValue = 0; timer = new Timer(); timerMethod(); setRefreshActionButtonState(true); displayView(1); } 

Basta con findViewById(R.id.action_Refresh).callOnClick();

o

findViewById(R.id.action_Refresh).performClick();

Puede probar esto:
obtener la referencia de la clase de menú opMenu dentro de su actividad aquí:

 Menu opMenu; @Override public boolean onCreateOptionsMenu(Menu menu) { opMenu= menu; getMenuInflater().inflate(R.menu.main, menu); onOptionsItemSelected(opMenu.findItem(R.id.action_Refresh)); return super.onCreateOptionsMenu(menu);; } 

Utilice opMenu.findItem() para activar clic

 // check is assignable to menu item implementation if(menuItem !=null && MenuItemImpl.class.isAssignableFrom(menuItem.getClass())){ // if so cast MenuItemImpl impl = (MenuItemImpl)menuItem; // invoke listener impl.invoke(); } 

que es igual a la implementación;

 public boolean invoke() { if (mClickListener != null && mClickListener.onMenuItemClick(this)) { return true; } if (mIntent != null) { mContext.startActivity(mIntent); return true; } return false; } 

siempre puedes usar reflexiones 🙂

  • Selección de texto de Webview no borrada
  • Cómo utilizar Android Spinner como una lista desplegable
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.