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

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

 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답변

  • 좋아요

    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이 존재하는지 확인이 필요할 것 같습니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.