0

이 질문은 여러 번 여기에 물어 왔지만 어느 누구에게도 도움을 찾을 수 없었습니다. 나는 안드로이드 응용 프로그램을 작성 중이며 ActionBar에서 탭을 만드는 데 문제가있는 것 같습니다. 몇 시간 동안 문제를 찾고 있었지만 해결책을 찾을 수없는 것 같았지만 근원을 찾은 것 같습니다. 심지어 결과를 얻고 빌드하기 위해 구현을 비 웠습니다. 아아아 아무것도 찾지 못했습니다. 지정된 자녀가 이미 부모가 있습니다

는 액션 바

// put ActionBar to nav. mode 
    ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    // init "YES" tab 
    Fragment yesTabFragment = Fragment.instantiate(this, YesTabFragment.class.getName()); 
    FlowTabListener yesTabListener = new FlowTabListener(yesTabFragment); 
    ActionBar.Tab yesTab = actionBar.newTab().setText("YES").setTabListener(yesTabListener); 
    actionBar.addTab(yesTab); 

이 클래스

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    _fragmentView = inflater.inflate(R.layout.yes_fragment, container);  
} 

의 onCreateView 방법되는 탭 단편 삽입 만드는 이는 단편 XML 레이아웃

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 

    </LinearLayout> 

볼 수 있듯이 구현은 비어 있으며이 조각을 인스턴스화하지 않습니다. b 이번에는 efore (그리고 이후) 나는이 오류 얻을 그러나 :

E/AndroidRuntime(2995): FATAL EXCEPTION: main 
E/AndroidRuntime(2995): java.lang.RuntimeException: Unable to start activity ComponentInfo{activities.MainActivity}:  
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 

을 나는 그것이 내가 응용 프로그램을 실행 않습니다 actionBar.addTab()을 주석 때부터 작업 표시 줄에 탭의 추가와 함께 할 수있는 뭔가를 (있다고 생각 탭이 없으면)

나는이 문제를 어떻게 해결할 것인지 힌트를 얻고 싶습니다.

감사 헤드들

답변

5

inflate()의 두 번째 매개 변수는 기본 부모 :

_fragmentView = inflater.inflate(R.layout.yes_fragment, container); 

변경이 라인 :

_fragmentView = inflater.inflate(R.layout.yes_fragment, null); 
+0

감사합니다! 그것은 매력처럼 일했습니다. 당신은 내가 뭘 잘못했는지 설명해 주시겠습니까? (그것을 이해할 수 없기 때문에 나는 그것을 이해하지 못한다고 생각합니다.) 나는 정말로 그것을 고맙게 생각할 것이다. 다시 한 번 감사드립니다! –

+1

물론 각보기에는 하나의 상위 항목 만있을 수 있습니다. 당신의 코드에서'inflate()'는 기본적으로'_fragmentView'의 부모를'container'로 설정합니다. 탭으로 추가하려고하면 작업 표시 줄 자체가 (유일한) 상위 항목으로 정의되어야합니다. (이 자식을 자동적으로 "납치"하려고하는 것이 아니라 단순히 예외를 던집니다.)'container' 대신'null'을 사용하면 부모가없는'_fragmentView'를 생성하고 나중에 액션 바는 그 객체의 부모로 설정됩니다. '_fragmentView'. 그게 도움이 되니? – Sam

+0

나는 그것이 지금 의미가있는 것을 본다. .. 정말로 감사한다, 나는 내가 당신에게 평가를 줄 수 있었 더라면 좋겠다고 생각한다. 그러나 나는 아직도 여기의 멍청하다. –

관련 문제