2013-01-12 4 views
1

다운로더 응용 프로그램을 만들고 있는데 onCreateView 반환 섹션 이후에 자식 부모 오류가 발생했습니다. 많은 것을 시도했지만 아무 도움이되지 않았습니다. 내가 NPE를 가지고/또는 V를 제거하지만 V.getParent()가 null 인/ListFragment의 예외 : 지정된 자식에 이미 부모가 있습니다.

01-12 12:05:15.558: E/AndroidRuntime(10740): java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 

또는 컨테이너를 제거 : 컴파일러가 말한다 후 ((ViewGroup)dlistView.getParent()).removeView(dlistView); 을 : 나는 시도했다.

어떤보기가 상위이고 어떤보기가 하위입니까?

코드 :

public static class DownloadingFragment extends ListFragment { 
public static final String ARG_SECTION_NUMBER = "section_number"; 
     public DownloadingFragment() { 
     } 

     @Override 
     public View onCreateView (LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View V = inflater.inflate (R.layout.list, null);  
      ListView dlistView = (ListView) V.findViewById(R.id.dlist); 
      List<DownloadInfo> downloadInfo = new ArrayList<DownloadInfo>(); 
      downloadInfo.add(new DownloadInfo("File", 1000)); 
      DownloadInfoArrayAdapter diaa = new DownloadInfoArrayAdapter(
        getActivity().getApplication(),R.layout.list, downloadInfo); 
      dlistView.setAdapter(diaa); 
     return dlistView; // throw exception 
     } 
    } 
//... 
} 

당신의 도움에 미리 감사드립니다.

편집 : 새로운 코드 : 당신이 (어딘가에 V의 레이아웃 트리에) 부모가있는 목록보기를 반환하기 때문입니다

public static class DownloadingFragment extends Fragment { 
     public static final String ARG_SECTION_NUMBER = "section_number"; 
     public DownloadingFragment() { 
     } 
     @Override 
     public View onCreateView (LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View V = inflater.inflate (R.layout.list, null);  
     return V; 
     } 

     @Override 
     public void onStart() { 
      // TODO Auto-generated method stub 
      super.onStart(); 
      ListView dlistView = (ListView) getView().findViewById(R.id.dlist); 
      List<DownloadInfo> downloadInfo = new ArrayList<DownloadInfo>(); 
      downloadInfo.add(new DownloadInfo("File", 1000)); 
      DownloadInfoArrayAdapter diaa = new DownloadInfoArrayAdapter(
        getActivity().getApplication(),R.layout.list, downloadInfo); 
      dlistView.setAdapter(diaa); 
     } 
    } 
//... 
} 

답변

1

.

모든 유형의 조각에 대해 onCreateView는 부모가없는보기를 반환해야합니다.

이 경우 listFragment이므로 xml 또는 프로그래밍 방식으로 listview를 만든 다음이를 반환하십시오. 그것이 부모로서 프래그먼트 (fragment)를 가질 필요가 있기 때문에 어떤 부모도 가질 수 없다.

자세한 내용은 here 읽기 :이 조각은 처음의 사용자 인터페이스를 그리는 시간 때

시스템이이를 호출합니다. 조각에 대한 UI를 그리려면 조각의 레이아웃 루트 인이 메서드에서보기를 반환해야합니다. 조각에 이 없으면 null을 반환 할 수 있습니다.

+0

감사합니다. 내 하루를 저장했습니다. – velsorange

1

inflate의 세 번째 인수는 false입니다. 그래서이

View V = inflater.inflate (R.layout.list, null,false); 

와 함께이 라인

View V = inflater.inflate (R.layout.list, null);  

를 교체하고이 도움이 done.hope 당신입니다.

관련 문제