在button/图像点击切换导航抽屉“打开”

我创build了一个连接到包含一个图像视图的XML的片段。 导航抽屉(使用操作栏compat)在activity_main.java内部设置,工作正常。 我想要做的是,当我点击片段内的图像时,导航抽屉应该“切换打开”。

在onCreateView方法内的下面的代码返回一个空指针:

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; } 

在以下语句中返回空指针:

mDrawerLayout.openDrawer(mDrawer);

  • 递归进入executePendingTransactions
  • 从片段调用片段
  • 如何膨胀片段内的视图
  • AppCompat v22.1.0不会正确地将所有的xml小部件用于片段
  • NullPointerException在FragmentManager中
  • Fragment实例中带有Otto事件总线的IllegalArgumentException
  • 共享元素转换没有预期的行为
  • 什么时候应该在片段中获得宽度视图
  • 这些行引用了错误的观点:

     final LinearLayout mDrawer = (LinearLayout) view.findViewById(R.id.drawer); final DrawerLayout mDrawerLayout = (DrawerLayout)view.findViewById(R.id.drawer_layout); 

    他们正在寻找'R.layout.home'中的抽屉,因为这是你膨胀并设置为视图variables,findViewById()返回null,因为它不在那里。

    如果这个视图是activity_main的子视图,那么你应该可以将它们改为:

     final LinearLayout mDrawer = (LinearLayout) getActivity().findViewById(R.id.drawer); final DrawerLayout mDrawerLayout = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout); 

    另外,我会让这些class级成员,而不是最终的。

    它工作在button点击

     mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { drawer.openDrawer(GravityCompat.START); } }); 

    它适用于图片点击

     mImageview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { drawer.openDrawer(GravityCompat.START); } }); 

    按照这些指南。

    – 创build一个导航抽屉

    – 使用导航抽屉的Android滑动菜单