Reputation: 2785
I trying the check the status of particular view and then show menuitem accordingly.
l1 is linearLayout (below it has listview) that I have declared in OnCreate.
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
boolean drawerOpen = mDrawerLayout.isDrawerOpen(l1);
menu.findItem(R.id.action_login).setVisible(!drawerOpen);
MenuItem item = menu.findItem(R.id.action_login);
if (oil.getLoginCountValue() < 1)
{
item.setTitle(getResources().getString(R.string.action_login));
}
else
{
item.setTitle(getResources().getString(R.string.action_logout));
}
fromLogin = sharedPreferences.getInt("fromLogin", Integer.valueOf(getResources().getString(R.string.defaultcasenumber)));
if (fromLogin == 0 || fromLogin == 1)
{
menu.findItem(R.id.action_search).setVisible(false);
}
else
{
menu.findItem(R.id.action_search).setVisible(true);
}
menu.findItem(R.id.action_rate_the_app).setVisible(!drawerOpen);
menu.findItem(R.id.action_share_app).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
I am getting the following error when I am using the above code:
java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams
at android.support.v4.widget.DrawerLayout.isDrawerView(DrawerLayout.java:1271)
at android.support.v4.widget.DrawerLayout.isDrawerOpen(DrawerLayout.java:1521)
at com.ylg.testApp.MainActivity.onPrepareOptionsMenu(MainActivity.java:674)
at android.app.Activity.onPreparePanel(Activity.java:2864)
at android.support.v4.app.FragmentActivity.onPrepareOptionsPanel(FragmentActivity.java:487)
at com.ylg.testApp.MainActivity.onPrepareOptionsPanel(MainActivity.java:668)
at android.support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:476)
at android.support.v7.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:90)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onPreparePanel(AppCompatDelegateImplBase.java:268)
at android.support.v7.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:90)
at android.support.v7.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:550)
at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:443)
at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:60)
Upvotes: 0
Views: 68
Reputation: 11122
I think you can't pass linearlayout to isDrawerOpen()
for checking if drawer open/visible or not you can check using this
boolean drawerOpen = mDrawerLayout.isDrawerVisible(Gravity.START);
If you put your drawer in the right side you should change Gravity.START
to Gravity.END
Upvotes: 1