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


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

 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; 이부분입니다.

  • 2016년 06월 07일에 작성됨

조회수 196


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


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close