我的应用程序中有 10 个不同的片段。我需要在几个片段中隐藏导航抽屉(抽屉布局),如何从片段访问抽屉布局并隐藏它?我知道我们需要在活动中使用mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
但如何在片段中做到这一点呢?
你可以在你的片段中做这样的事情:
private MainActivity main;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
main = (MainActivity) activity;
}
你绝对应该避免这种情况!
更好的解决方案将使用接口在主组件和片段之间进行通信。你最终会得到这样的结果:
public interface MyInterface {
public void lockDrawer();
public void unlockDrawer();
}
Main:
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) mActivity) 的操作,您将无法重用您的 Fragment。
将会出现 ClassCastException。为了重用您的 Fragment,您应该使用 Interface,而不是转换 MainActivity。所以每个活动都会使用
你的片段可以简单地实现这个接口。即使没有 DrawerLayout 你也可以使用它。所以最大的努力就是可重用性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)