Android Documentation for Fragment 




- Fragment 들을 Activity 에 띄우는 방식(inflate)을 쓰려면 container 역할을 할 activity 가 ActionBarActivity 혹은 FragmentActivity 를 상속받아 처리해야 한다.



- Fragment 끼리 통신은 어떻게 할까?


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
서상호

,