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


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

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

  • 2016년 07월 13일에 수정됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.
  • 2016년 07월 12일에 작성됨
조회수 376


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;
    }   
}

  • 감사합니다    손진우   2016.7.12 14:36     

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

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