Android Documentation for Fragment
- Fragment 들을 Activity 에 띄우는 방식(inflate)을 쓰려면 container 역할을 할 activity 가 ActionBarActivity 혹은 FragmentActivity 를 상속받아 처리해야 한다.
- Fragment 끼리 통신은 어떻게 할까?
- portrait 모드 에서 landscape 모드로 변경되고 하며 반복되는 과정에서 xml layout 으로부터 계속해서 새로 불러와야 되면 부드러운 transition 이 어렵다. 따라서 Java 에서 직접 코드로 변경해주는 방법을 더 선호해야 한다. 다음 코드는 그러한 방식을 채택하였다.
/**
* Sets up the layout programatically for the three different states. Portrait, landscape or
* fullscreen+landscape. This has to be done programmatically because we handle the orientation
* changes ourselves in order to get fluent fullscreen transitions, so the xml layout resources
* do not get reloaded.
*/
private void layout() {
boolean isPortrait =
getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
listFragment.getView().setVisibility(isFullscreen ? View.GONE : View.VISIBLE);
listFragment.setLabelVisibility(isPortrait);
closeButton.setVisibility(isPortrait ? View.VISIBLE : View.GONE);
if (isFullscreen) {
videoBox.setTranslationY(0); // Reset any translation that was applied in portrait.
setLayoutSize(videoFragment.getView(), MATCH_PARENT, MATCH_PARENT);
setLayoutSizeAndGravity(videoBox, MATCH_PARENT, MATCH_PARENT, Gravity.TOP | Gravity.LEFT);
} else if (isPortrait) {
setLayoutSize(listFragment.getView(), MATCH_PARENT, MATCH_PARENT);
setLayoutSize(videoFragment.getView(), MATCH_PARENT, WRAP_CONTENT);
setLayoutSizeAndGravity(videoBox, MATCH_PARENT, WRAP_CONTENT, Gravity.BOTTOM);
} else {
videoBox.setTranslationY(0); // Reset any translation that was applied in portrait.
int screenWidth = dpToPx(getResources().getConfiguration().screenWidthDp);
setLayoutSize(listFragment.getView(), screenWidth / 4, MATCH_PARENT);
int videoWidth = screenWidth - screenWidth / 4 - dpToPx(LANDSCAPE_VIDEO_PADDING_DP);
setLayoutSize(videoFragment.getView(), videoWidth, WRAP_CONTENT);
setLayoutSizeAndGravity(videoBox, videoWidth, WRAP_CONTENT,
Gravity.RIGHT | Gravity.CENTER_VERTICAL);
}
}
http://egloos.zum.com/blackroom/v/133931
fragment 사용시 아래 onCreateView에서 view를 생성하는 방법에는 몇 가지가 있겠지만 내가 주로 사용하는 방법은 2가지이다. 1. View view = inflater.inflate(R.layout.fragment,null); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment,null); return view; } -> container를 사용하지 않고 view를 생성함으로써 container의 특성을 무시한다. (layout에 넣을 때 부모 layout이 없다고 생각하면 된다. 2. View view = inflater.inflate(R.layout.fragment,container,false); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment,container,false); return view; } -> 부모 Layout안에 view를 생성하여 거기에 자식 view 로 넣는다. 이것을 왜 언급하나 하면, 간혹 activity 에서 fragment를 교체할 때 2번과 같은 방식으로 view를 생성하지 않으면 height가 지멋대로 된다. 즉 fragment 생성시 주로 2번으로 생성하자. !! |
WRITTEN BY