切换导航抽屉'打开'在按钮/图像上单击

时间:2014-03-12 04:05:09

标签: android android-fragments navigation-drawer android-actionbar-compat

我创建了一个挂钩到包含一个图像视图的XML的片段。导航抽屉(使用actionbar 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);

3 个答案:

答案 0 :(得分:10)

这些行引用了错误的视图:

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

他们正在寻找R.layout.home'因为那是你膨胀并设置为视图变量的东西,findViewById()返回null,因为它不存在。

如果此视图是activity_main的子视图,那么您应该能够将这些视图更改为:

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

另外,我会成为这些班级成员,而不是最终成员。

答案 1 :(得分:3)

适用于按钮点击

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

        }
    });

答案 2 :(得分:0)

您需要在活动中使用这样的内容:

final DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
     imageViewMenu = (ImageView)  findViewById(R.id.imageViewMenu);

     imageViewMenu.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
             mDrawerLayout.openDrawer(Gravity.START);
         }
     });

希望帮助你!