2013-07-19 33 views
2

我是Fragments的新手。我嘗試了簡單的片段示例。但它會拋出錯誤。我不知道什麼是錯的。IllegalArgumentException:未找到ID爲0x7f07003c的片段

public class NewActivity extends Activity { 
    int mStackLevel = 1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (savedInstanceState == null) { 
      Fragment newFragment = NewFragment 
        .newInstance(mStackLevel); 
      FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      ft.add(R.id.simple_fragment, newFragment).commit(); 
     } else { 
      mStackLevel = savedInstanceState.getInt("level"); 
     } 
    } 
    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt("level", mStackLevel); 
    } 
    public static class NewFragment extends Fragment { 
     int mNum; 
     Context context; 

     static NewFragment newInstance(int num) { 
      NewFragment f = new NewFragment(); 

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

      return f; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      mNum = getArguments() != null ? getArguments().getInt("num") : 1; 
      context = getActivity(); 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View v = inflater.inflate(R.layout.example_fragment, container, 
        false);   
      return v; 
     } 
    } 

} 

我的logcat顯示:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.FragmentExample/com.example.FragmentExample.NewActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f07003c for fragment NewFragment{40ff0850 #0 id=0x7f07003c} 

任何幫助將得到高度讚賞。

謝謝。

回答

6
ft.add(R.id.simple_fragment, newFragment).commit(); 

您錯過了setContentView爲您的活動。如果沒有View層次結構,則無法添加片段。

注意:您的片段由一個活動託管。所以你需要首先將內容設置爲活動。

+2

不錯的漁獲物。我幾次在發現錯誤時錯過了這個問題。 – Raghunandan

+1

感謝您的編輯 – Blackbelt

1

只需用你的方法

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(Your_layout_file); 

     if (savedInstanceState == null) { 
      Fragment newFragment = NewFragment 
        .newInstance(mStackLevel); 
      FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      ft.add(R.id.simple_fragment, newFragment).commit(); 
     } else { 
      mStackLevel = savedInstanceState.getInt("level"); 
     } 
    } 

代替這種方法,你錯過了這條線setContentView(Your_layout_file);

0

這樣的回答凸顯可能出現的一個愚蠢的錯誤,即嵌套片段或要轉換活動的片段時出現。

如果您試圖用fragmentManager代替片段中的片段,但您是而不是使可導致問題的父代片段膨脹。

BaseFragment.javaOnCreateView

if (savedInstanceState == null) { 
      getFragmentManager().beginTransaction() 
        .replace(R.id.container, new DifferentFragment()) 
        .commit(); 
     } 

return super.onCreateView(inflater, container, savedInstanceState); 

更換super.onCreateView(inflater, container, savedInstanceState); 與充氣正確的佈局片段:

 return inflater.inflate(R.layout.base_fragment, container, false); 
相關問題