Android Fragment no view found for ID?

前端 未结 30 2397
逝去的感伤
逝去的感伤 2020-11-22 05:33

I have a fragment I am trying to add into a view.

FragmentManager fragMgr=getSupportFragmentManager();
feed_parser_activity content = (feed_parser_activity)f         


        
30条回答
  •  爱一瞬间的悲伤
    2020-11-22 06:11

    I encountered this problem when I tried to replace view with my fragment in onCreateView(). Like this:

    public class MyProjectListFrag extends Fragment {
    
    
        private MyProjectListFragment myProjectListFragment;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
    
            FragmentManager mFragmentManager = getFragmentManager();
            myProjectListFragment = new MyProjectListFragment();
            mFragmentManager
                    .beginTransaction()
                    .replace(R.id.container_for_my_pro_list,
                            myProjectListFragment, "myProjectListFragment")
                    .commit();
        }
    

    It told me

    11-25 14:06:04.848: E/AndroidRuntime(26040): java.lang.IllegalArgumentException: No view found for id 0x7f05003f (com.example.myays:id/container_for_my_pro_list) for fragment MyProjectListFragment{41692f40 #2 id=0x7f05003f myProjectListFragment}
    

    Then I fixed this issue with putting replace into onActivityCreated(). Like this:

    public class MyProjectListFrag extends Fragment {
    
        private final static String TAG = "lch";
    
        private MyProjectListFragment myProjectListFragment;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
    
            return inflater
                    .inflate(R.layout.frag_my_project_list, container, false);
        }
    
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onActivityCreated(savedInstanceState);
    
            FragmentManager mFragmentManager = getFragmentManager();
            myProjectListFragment = new MyProjectListFragment();
            mFragmentManager
                    .beginTransaction()
                    .replace(R.id.container_for_my_pro_list,
                            myProjectListFragment, "myProjectListFragment")
                    .commit();
    
        }
    
    1. You have to return a view in onCreateView() so that you can replace it later
    2. You can put any operation towards this view in the following function in fragment liftcycle, like onActivityCreated()

    Hope this helps!

提交回复
热议问题