안드로이드에서 뷰페이저와 프레그먼트사용중인데 프레그먼트안의 리니어 레이아웃의 너비를 구하고 싶습니다.

조회수 1466회

안드로이드에서 뷰페이저와 프레그먼트를 사용하고 있습니다. 그 중에서 한 프레그먼트안의 리니어 레이아웃의 너비를 구하고 싶습니다. 예제를 연습하는 학생입니다.

 private View rootView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            rootView = (ViewGroup)inflater.inflate(R.layout.tab_fragment_1, container, false);

        return rootView;
    }

public void onActivityCreated(Bundle savedInstanceState) {
     super.onActivityCreated(savedInstanceState);

    rootView.getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);

    LinearLayout    linearForTime = (LinearLayout) rootView.findViewById(R.id.time);    

    int Width = forTimeWidth.getMeasuredWidth() / 5;
}

코드는 위와 같습니다. tab_fragment1에 있는 리니어 레이아웃의 너비를 구하고 싶은 데 위와 같이 코드를 작성하면 아래와 같은 오류와 함께 실행이 되지 않습니다.

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.LinearLayout.getMeasuredWidth()' on a null object reference at example.com.mptermui.TabFragment1.onActivityCreated(TabFragment1.java:149)

149번 코드가 바로 int Width = forTimeWidth.getMeasuredWidth() / 5; 이부분입니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 작성 하신 코드 중 너비를 구하는 다음 코드를,

    LinearLayout linearForTime = (LinearLayout) rootView.findViewById(R.id.time);
    int Width = forTimeWidth.getMeasuredWidth() / 5;
    

    아래와 같이 ViewTreeObserver.OnGlobalLayoutListener 내부에 작성해보세요.

    rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            LinearLayout linearForTime = (LinearLayout) rootView.findViewById(R.id.time);
            int Width = linearForTime.getMeasuredWidth() / 5;
        }
    });
    

    이렇게 작성했는데도 같은 에러가 발생할 경우, 레이아웃 파일인 tab_fragment_1.xml 내부에 R.id.time이 존재하는지 확인이 필요할 것 같습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)