我的应用程序中有10个不同的片段.我需要在几个片段中隐藏导航抽屉(抽屉布局),如何从片段中访问抽屉布局并隐藏它?我知道我们需要在活动中使用mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
但是如何在片段中使用它?
您可以在片段中执行以下操作:
private MainActivity main; @Override public void onAttach(Activity activity) { super.onAttach(activity); main = (MainActivity) activity; }
你绝对应该避免这个!
一个mutch更好的解决方案是使用接口在Main和Fragment之间进行通信.你最终会得到这样的东西:
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)mActivity的操作),您将无法重复使用Fragment.会有一个ClassCastException.为了重用你的Fragment,你应该使用一个接口而不是为你强制转换MainActivity.因此,每个将使用您的Frament的Activity都可以简单地实现此接口.即使没有DrawerLayout,你也可以使用它.所以最大的努力是可重用性.