点击按钮/图片时切换导航抽屉打开

8
我创建了一个片段,它连接到一个包含一个图像视图的 XML。在 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);

(注:空指针是指未初始化或明确设置为null的指针,可能导致程序崩溃或不可预料的行为。)
3个回答

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

此外,我会将这些设为类成员而不是final。


4

它可以通过按钮点击实现

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

        }
    });

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接