2

I am new to Fragments. I tried simple fragment example. But it throws the error. I don't know what is wrong.

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;
        }
    }

}

My logcat shows:

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}

4

3 回答 3

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

你错过setContentView了你的活动。如果没有 View 层次结构,就无法添加您的 Fragment。

注意:您的片段由活动托管。所以你需要先将内容设置到活动中。

于 2013-07-19T07:34:40.497 回答
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);

于 2013-07-19T07:37:48.777 回答
0

这个答案突出了一个可能发生的愚蠢错误,即嵌套片段或将活动转换为片段时出现的错误。

如果您尝试用 替换片段中的片段,fragmentManager但您没有膨胀可能导致问题的父片段。

BaseFragment.java 中 OnCreateView

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);
于 2015-02-24T08:54:30.267 回答