Avoid non-default constructors in fragments라는 에러 혹시 어떻게 해결해야 하나요?

조회수 5198회

Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead

이런 에러가 뜨는데 구글에 검색해보니 프레그먼트 사용중에 기본 생성자 말고 어떠한 값을 받는 생성자를 만들면 이런 오류가 나온다고 하는데.. 액티비티에서 프레그먼트로 값을 넘길 방법이 필요 합니다..

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    프로그먼트를 만들 때는 생성자를 오버로딩 하지 않고 생성 시 파라미터를 Bundle에 담아 setArgument() 함수를 호출하는 방식을 사용하는 것이 일반적입니다. 왜냐하면 안드로이드에 의해서 프래그먼트가 복원될 때는 프래그먼트의 기본 생성자를 호출하기 때문에 오버로딩된 생성자의 호출이 보장되지 않습니다.

    다음 코드를 참고하세요. 프래그먼트를 만들 때 사용하는 관용적 코드입니다. (https://developer.android.com/reference/android/app/Fragment.html)

    public static class DetailsFragment extends Fragment {
        /**
         * Create a new instance of DetailsFragment, initialized to
         * show the text at 'index'.
         */
        public static DetailsFragment newInstance(int index) {
            DetailsFragment f = new DetailsFragment();
    
            // Supply index input as an argument.
            Bundle args = new Bundle();
            args.putInt("index", index);
            f.setArguments(args);
    
            return f;
        }
    
        public int getShownIndex() {
            return getArguments().getInt("index", 0);
        }
    
         @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            TextView textView = new TextView(getActivity());
            text.setText(String.valueOf(getShownIndex()));
            return textView;
        }   
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)