我在我的应用程序中有10个不同的片段。我需要将导航抽屉(抽屉布局)隐藏在少数片段中,如何从片段访问抽屉布局并隐藏它?我知道我们需要在活动mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
中使用,但如何在碎片中完成它?如何从片段中禁用或隐藏抽屉布局Android
回答
你可以做这样的事情在你的片段:
private MainActivity main;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
main = (MainActivity) activity;
}
你一定要避免这种情况!
mutch更好的解决方案将使用一个接口在您的Main和片段之间进行通信。你最终会像这样的东西:
public interface MyInterface {
public void lockDrawer();
public void unlockDrawer();
}
主营:
public class DetailViewActivity extends AppCompatActivity implements MyInterface {
@Override
public void lockDrawer() {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
@Override
public void unlockDrawer() {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
}
片段:
public class MyFragment extends Fragment {
private MyInterface myInterface;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
myInterface = (MyInterface) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement MyInterface");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
myInterface.lockDrawer();
return inflater.inflate(R.layout.example_fragment, container, false);
}
@Override
public void onDestroyView() {
super.onDestroyView();
myInterface.unlockDrawer();
}
}
为什么这是最好的解决办法:如果你做这样的事情((HomeActivity)毫无疑问),你将无法重复使用你的片段。 将会有一个ClassCastException。为了重用你的Fragment,你应该使用一个接口,而不是投你MainActivity。因此,每个使用 的活动都可以简单地实现此界面。即使没有DrawerLayout,你也可以使用它。所以最大的努力就是可重用性。
写你的活动中,如下所示一个公共方法 - -
public void enableDisableDrawer(int mode) {
if (mDrawerLayout != null) {
mDrawerLayout.setDrawerLockMode(mode);
}
}
,然后里面片段的onResume
,你可以调用这个和改变抽屉锁模式需要
您可以使用此方法锁定或解锁抽屉:DrawerLayout.setDrawerLockMode(...)
。 (此方法还有另外两个版本,用于指定特定抽屉的锁定模式。)要锁定,请使用DrawerLayout.LOCK_MODE_LOCKED_CLOSED
;解锁,使用DrawerLayout.LOCK_MODE_UNLOCKED
。
如果您使用的是ActionBarDrawerToggle,则需要添加一些额外的代码,以防止在您锁定抽屉时单击ActionBarDrawerToggle时打开抽屉。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// check lock mode before passing to ActionBarDrawerToggle
// I assume your drawer is on the left; if not, use Gravity.RIGHT
int lockMode = mDrawer.getDrawerLockMode(Gravity.LEFT);
if (lockMode == DrawerLayout.LOCK_MODE_UNLOCKED &&
mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle your other action bar items...
return super.onOptionsItemSelected(item);
}
参考链接了解更多信息link here
我知道这一点。我的问题是,我怎样才能从活动访问它的形式片段。 –
创建您的活动两种方法。一个用于打开抽屉,另一个用于关闭抽屉。见下面的代码。
3210现在打电话从片段上述方法类似下面
((MainActivity)getActivity()).closeNavigationDrawer(); // to close drawer
((MainActivity)getActivity()).openNavigationDrawer(); // to open drawer
((MainActivity)getActivity()).lockNavigationDrawer(); // to lock drawer
((MainActivity)getActivity()).unLockNavigationDrawer(); // to unlock drawer
这将工作。也没有好的做法 - 活动和片段之间的沟通,你应该总是使用一个接口 –
您可以通过以下方式做到这一点 -
((HomeActivity) mActivity).enableDisableDrawer(DrawerLayout.LOCK_MODE_UNLOCKED);
OR
((HomeActivity) mActivity).enableDisableDrawer(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
其中mActivity是我的活动参考。
这种方式正在为我工作。
我不会推荐这个原因 - 你以这种方式失去了碎片的可重用性 –
您可以使用此方法来锁定或解锁抽屉:DrawerLayout.setDrawerLockMode(...)。 (此方法还有另外两个版本,用于指定特定抽屉的锁定模式。)要锁定,请使用DrawerLayout.LOCK_MODE_LOCKED_CLOSED;要解锁,请使用DrawerLayout.LOCK_MODE_UNLOCKED。
如果您使用的是ActionBarDrawerToggle,则需要添加一些额外的代码,以防止在您锁定抽屉时单击ActionBarDrawerToggle时打开抽屉。
enter code here
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// check lock mode before passing to ActionBarDrawerToggle
// I assume your drawer is on the left; if not, use Gravity.RIGHT
int lockMode = mDrawer.getDrawerLockMode(Gravity.LEFT);
if (lockMode == DrawerLayout.LOCK_MODE_UNLOCKED &&
mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle your other action bar items...
return super.onOptionsItemSelected(item);
}
- 1. android:导航抽屉中的片段或上下文布局
- 2. 我的片段隐藏导航抽屉?
- 3. 带抽屉布局的片段管理
- 4. 导航抽屉中的片段布局Android应用程序
- 5. 带有碎片的Android抽屉布局
- 6. 在框架布局隐藏片段android
- 7. 在Android中为现有地图片段添加抽屉布局
- 8. 如何从一侧禁用抽屉布局?
- 9. Android抽屉布局在片段内容下显示
- 10. 如何将碎片布局与导航抽屉布局结合
- 11. Android:在抽屉布局中使用地图扩展片段时出错
- 12. 如何隐藏抽屉布局的工具栏,仍然可以使用打开的抽屉按钮(三行)?
- 13. 导航抽屉片段只适用于ListView控件布局
- 14. 将链接片段链接到抽屉布局中的项目
- 15. 隐藏Android软键盘当点击导航抽屉中的片段
- 16. 滑动抽屉隐藏片段的最后一行GridView
- 17. Android - 抽屉布局 - 关闭抽屉导致空指针异常
- 18. 滑动抽屉隐藏ListView
- 19. 在导航抽屉中,如何在从片段调用片段时刷新标题和抽屉列表?
- 20. 如何隐藏Android中的布局
- 21. Android Studio不会显示抽屉布局
- 22. Android小吃店在抽屉式布局
- 23. Android抽屉布局未显示
- 24. Android材质设计抽屉布局
- 25. Android的抽屉多图布局
- 26. Android Studio的默认Nagivatinal抽屉布局
- 27. Android的抽屉布局找不到R.layout.drawer_list
- 28. 如何声明片段隐藏在XML布局中
- 29. 在片段全屏高度内做抽屉布局
- 30. Admobs与抽屉布局重叠片段列表视图
谢谢你。它的工作完美。 – sivaprakash