У меня есть панель действий с пунктом меню на панели. Когда я нажимаю на значок обновления, у меня есть метод, показывающий индикатор выполнения.Программный пункт меню действий пожарной панели в Android
Я хотел бы сделать это при загрузке этой деятельности. Следовательно, я попробовал называть элемент значка обновления, щелкая программно:
onOptionsItemSelected(menu.findItem(R.id.action_Refresh));
Я вызываю это после создания меню.
Но это дает исключение null-указателя для загрузки моих данных. Если я нажму кнопку «Обновить», он работает нормально, но если я его программным образом вызову, я получаю сообщение об ошибке.
Вот что у меня есть:
@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);
}
}
}
}
Можно ли вызвать пункт меню программно? если да, то как?
Спасибо!
Wrap код, который вы выполнить для действия обновления в новом методе, а затем вызвать его для элемента действия и везде, где вам это нужно назвать в вашей деятельности. – fasteque
проверить мой ответ –