Я использую MaterialShowcaseView, чтобы показать пользователю быстрый учебник при первом запуске приложения.Android получить ссылку на элемент действия?
Проблема, с которой я столкнулась, заключается в том, что я могу получить ссылку на объекты в элементах панели действий, когда пользователь выбирает этот элемент в onOptionsItemSelected.
т.е.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.my_location:
// User chose the "Favorite" action, mark the current item
// as a favorite...
ShowcaseConfig config = new ShowcaseConfig();
config.setDelay(500); // half second between each showcase view
MaterialShowcaseSequence sequence = new MaterialShowcaseSequence(this, SHOWCASE_ID);
sequence.setConfig(config);
sequence.addSequenceItem(findViewById(R.id.action_my_location),
"This is button one", "GOT IT");
sequence.start();
Toast.makeText(MapsActivity.this, "My location action press", Toast.LENGTH_SHORT).show();
return true;
default:
// If we got here, the user's action was not recognized.
// Invoke the superclass to handle it.
return super.onOptionsItemSelected(item);
}
}
Приведенный выше код работает.
Можно ли получить ссылку на просмотр в onCreateOptionsMenu? Все, что я пробовал, дает мне ссылку на нулевой объект для представления.
Я пробовал this answer тоже, без успеха.
Следует отметить, что для actionBar я использовал android's action bar tutorial.
Спасибо, ребята.
EDIT:
Это то, что я пытался сделать сейчас:
@Override
public void invalidateOptionsMenu() {
super.invalidateOptionsMenu();
}
MenuItem mi;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mi = menu.findItem(R.id.action_my_location);
new MaterialShowcaseView.Builder(this)
.setTarget(mi.getActionView())
.setDismissText("GOT IT")
.setContentText("This is some amazing feature you should know about")
.setDelay(300) // optional but starting animations immediately in onCreate can make them choppy
.singleUse("101010110") // provide a unique ID used to ensure it is only shown once
.show();
return super.onPrepareOptionsMenu(menu);
}
Ошибка:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.getLocationInWindow(int[])' on a null object reference
Пожалуйста, проверьте, является ли ваш пункт меню остается пустой внутри' onPrepareOptionsMenu '? Также вставьте номер строки, где возникло исключение –
Исключение происходит в .setTarget (mi.getActionView()). и Меню не равно нулю. – Adz
Проверьте мое изменение в моем ответе. Я дал код о том, как библиотека предлагает использовать его на элементах actiobar. –