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アクティビティに参加できませんでした。ビュー階層がないと、フラグメントを追加できません。

注:フラグメントはアクティビティによってホストされています。そのため、最初にコンテンツをアクティビティに設定する必要があります。

于 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 に答える