2013-07-19 34 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); 
相关问题