我使用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也沒有成功。
我應該提到的是,我使用的是android的action bar tutorial。
謝謝你們。
編輯:
這是我試過現在要做的:
@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物品上使用它的代碼。 –