안드로이드에서 뷰페이저와 프레그먼트사용중인데 프레그먼트안의 리니어 레이아웃의 너비를 구하고 싶습니다.
조회수 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이 존재하는지 확인이 필요할 것 같습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력