Cem Philipp ..
11
您可以在片段中执行以下操作:
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,你也可以使用它.所以最大的努力是可重用性.