Sanjana Nair
Sanjana Nair

Reputation: 2785

LInearLayout$LayoutParams cannot be cast error in android

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

Answers (1)

Niko Adrianus Yuwono
Niko Adrianus Yuwono

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

Related Questions