【问题标题】:IllegalArgumentException: No view found for id 0x7f07003c for fragmentIllegalArgumentException:没有为片段找到 id 0x7f07003c 的视图
【发布时间】:2013-07-19 07:30:08
【问题描述】:

我是 Fragments 的新手。我尝试了简单的片段示例。但它会抛出错误。不知道怎么回事。

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:无法启动活动 ComponentInfo{com.example.FragmentExample/com.example.FragmentExample.NewActivity}:java.lang.IllegalArgumentException:未找到片段 NewFragment{40ff0850 #0 id 的 id 0x7f07003c 的视图=0x7f07003c}

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:
    ft.add(R.id.simple_fragment, newFragment).commit();
    

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

    注意:您的片段由活动托管。所以需要先给activity设置内容。

    【讨论】:

    • 不错的收获。我盯着这个问题几次错过了发现错误。
    【解决方案2】:

    只需将此方法替换为您的方法

    @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);

    【讨论】:

      【解决方案3】:

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

      如果您尝试用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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多