Toggle Navigation Drawer 'open' on Button/ Image click
Solution 1
These lines are referencing the wrong view:
final LinearLayout mDrawer = (LinearLayout) view.findViewById(R.id.drawer);
final DrawerLayout mDrawerLayout = (DrawerLayout)view.findViewById(R.id.drawer_layout);
They are looking for the drawer in 'R.layout.home' because that's what you inflate and set to the view variable, findViewById() returning null because it's not there.
If this view is a child of activity_main then you should be able to change these to:
final LinearLayout mDrawer = (LinearLayout) getActivity().findViewById(R.id.drawer);
final DrawerLayout mDrawerLayout = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout);
Additionally, I'd make these class members and not final.
Solution 2
It works on Button click
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
drawer.openDrawer(GravityCompat.START);
}
});
It works on Image click
mImageview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
drawer.openDrawer(GravityCompat.START);
}
});
rajagrawal
Updated on September 17, 2020Comments
-
rajagrawal over 3 years
I've created a fragment that is hooked to an XML containing one image view. A navigation drawer (using actionbar compat) is set up inside activity_main.java and is working fine. What i'm wanting to do is, when I tap on the image inside the fragment, the navigation drawer should 'toggle open'.
The following code inside onCreateView method returns a null pointer:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedinstanceState) { View view=inflater.inflate(R.layout.home, container, false); ImageView img=(ImageView)view.findViewById(R.id.imageView1); // Defined inside activity_main.xml final LinearLayout mDrawer = (LinearLayout) view.findViewById(R.id.drawer); // Defined inside activity_main.xml final DrawerLayout mDrawerLayout = (DrawerLayout)view.findViewById(R.id.drawer_layout); img.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mDrawerLayout.openDrawer(mDrawer); } }); return view; }
A null pointer is returned at the following statement:
mDrawerLayout.openDrawer(mDrawer);