2011-11-26 4 views
4

화면을 회전 할 때까지 조각으로 변환 한 것이 꽤 잘된 것 같습니다. 다음 유형의 오류가 발생합니다.안드로이드 조각 다시 인스턴스화 오류

RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {com.ghcssoftware.gedstar/com.ghcssoftware.gedstar.GedStar} : android.support.v4.app.Fragment $ InstantiationException : Unable to : fragment 인스턴스화 com.ghcssoftware.gedstar.PersonTab $ PersonTabFrag : 클래스 이름이 존재하고, public이며, 빈 생성자가 public인지 확인합니다.

문제의 클래스가 존재하고 공개되며 빈 생성자를 결과에는 변화가 없다. 몇 가지 샘플 코드를 보면 빈 생성자가 보이지 않지만 코드 작성 방법과 다른 점을 알 수 있습니다.

1) 내 조각 클래스를 "정적"으로 선언해야하는 이유가 있습니까? 많은 샘플이 있습니까?

2) 조각 클래스 내에서 "newInstance"의 사용을 구현해야합니까? 왜 그냥 생성자를 갖는 대신이 작업을 수행할까요? 예를 들어 V14 샘플 중 하나에서 :

public static class CountingFragment extends Fragment { 
    int mNum; 

    /** 
    * Create a new instance of CountingFragment, providing "num" 
    * as an argument. 
    */ 
    static CountingFragment newInstance(int num) { 
     CountingFragment f = new CountingFragment(); 

     // Supply num input as an argument. 
     Bundle args = new Bundle(); 
     args.putInt("num", num); 
     f.setArguments(args); 

     return f; 
    } 

일부 Java 개념에는 아직 익숙하지 않으므로 기본 사항이 누락 될 수 있습니다.

더그 고든 GHCS 소프트웨어

+0

회전 문제가 어떤 일인지 잘 모르겠지만이 페이지에서는 정적 클래스 선언의 용도에 대해 설명합니다. /www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html – goto10

답변

4

내 조각 클래스는 많은 샘플과 마찬가지로 "정적"선언해야 어떤 이유가 있나요?

뭔가의 내부 클래스 인 경우에만. 귀하의 계열은 PersonTab의 내부 클래스로 표시되므로 정적이어야합니다. 또는 PersonTab 외부로 이동하여 독립 실행 형 Java 클래스로 만듭니다.

조각 클래스 내에서 "newInstance"의 사용을 구현해야합니까? 왜 그냥 생성자를 갖는 대신이 작업을 수행할까요?

이것은 단지 공장 방법 일뿐입니다. 프레임 워크에서 필요하지 않습니다.

+0

약간의 설명을 원합니다. 앱을 실행하면서 화면을 회전하면 내 활동이 "다시 시작되었습니다"- 정확합니까? 그렇다면 조각 클래스를 인스턴스화하려고 시도하는 것은 누구입니까? 처음 시작할 때 내 활동 자체가 객체를 만들어 컨테이너보기에 추가합니다. 회전 후에 다시이 작업을 수행하지 않겠습니까? 그러면 왜 실패할까요? 차이점은 무엇입니까? – gordonwd

+0

@ gordonwd : "그럼 누가 조각 클래스를 인스턴스화하려고합니까?" - 대답이 ''또는 'FragmentTransaction'을 통해 설정되었는지 여부를 명시하지 않았기 때문에 대답 할 수 없습니다. "로테이션이 끝난 후 다시이 작업을 다시하지 않겠습니까?" -- 예. "그러면 왜 실패할까요? 그 차이점은 무엇입니까?" -- 다른 점이 없다. 우리는 독자들을 신경 쓰지 않는다는 것을 이해하십시오. 우리는 당신이 제공하는 증거에 의해서만 갈 수 있습니다.당신의 증거는 제가 제 대답에서 지적한 바와 같이 조각 클래스 선언에 결함이 있음을 나타냅니다. – CommonsWare

+0

죄송합니다, Mark - 알겠습니다. 이 문제를 해결하는 방법을 알고 있지만 조금 더 나은 점을 이해하고 싶습니다. 따라서 일부 중단 점을 넣을 것이므로 어떤 점에서 문제가 있는지 알 수 있습니다 (" 고치다"). 내 파편은 모두 거래에 의해 추가됩니다. 나는 꽤 복잡한 기존 응용 프로그램을 가지고 있으며, 조각으로 친숙하게 만들기 위해 몇 가지 단축키를 사용하려고했지만, 그게 어떻게되는지 알았습니다. – gordonwd

0

2). 변수 throw newInstance 함수 인수를 전달하면 해당 경우 num이며 constractor와 onCreateView 사이에 값을 가져와야하는 클래스 private 변수를 제외 할 수 있습니다. int 변수의 경우에는 아무 것도하지 않지만 긴 문자열의 경우 ... 안부, yury

관련 문제