[英]Toggle Navigation Drawer 'open' on Button/ Image click
我创建了一个挂钩到包含一个图像视图的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);
这些行引用了错误的视图:
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);
另外,我会成为这些班级成员,而不是最终成员。
它适用于按钮单击
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);
}
});
你需要在你的活动中使用这样的:
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);
}
});
希望能帮到你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.