Fragments disappear when rotated

android, android-fragments, android-layout, java, rotation

Solution

You actually don't need to add the `Fragment` every time the `Activity` is created; the `FragmentManager` maintains them automatically. You should wrap the code which does the `FragmentTransaction` in an `if (savedInstanceState == null)` check, so that it is only executed the first time the `Activity` is created. For example:

if (savedInstanceState == null) {
    getFragmentManager().beginTransaction()
                        .add(R.id.list_layout, new ListFragment(), "LIST")
                        .commit();
}

Problem

I’ve added the fragments using java. when I open the app in portrait mode it works. if I rotate the fragment just disappear. but if I close the app, then rotate the phone, and then open the app again, it works. i have two different layouts one for portrait mode other for landscape mode, both with the same name, i have the layout for portrait in the "layout" folder, and the layout for landscape on "layout-land" folder. it seems like i am forgetting something, sincerely i am new on android development. Activity: ``` @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListFragment frag = new ListFragment(); setContentView(R.layout.layout_main); FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.add(R.id.LIST_LAYOUT,frag,"LIST"); transaction.commit(); } ``` Fragment : ``` public class ListFragment extends Fragment implements AdapterView.OnItemClickListener{ ListView List; Communicator communicator; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //return super.onCreateView(inflater, container, savedInstanceState); return inflater.inflate(R.layout.mlistfragment,container,false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); communicator = (Communicator) getActivity(); List = (ListView) getActivity().findViewById(R.id.listView); ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(),R.array.StrListButtons,android.R.layout.simple_list_item_1); List.setAdapter(adapter); List.setOnItemClickListener(this); } ```

Original source