Ali Haidar
Ali Haidar

Reputation: 13

android:fragments crash on screen Orientation

I've made two XML files one for portrait mode and the other is for landscape

When i start the app it runs normally and after flipping the screen for the second time it crashes and gives this error:java.lang.IllegalStateException: Fragment has not been attached yet.

Eventhough the landscape xml file contains static fragments and the portriat one contains nothing(in order to add the fragments dinamically on further steps).Here is my XML File:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<fragment
    android:name="com.example.alihaidar.fragmentlab.fragList"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="match_parent"
    android:id="@+id/frag_list"
    />
<fragment
    android:name="com.example.alihaidar.fragmentlab.fragContent"
    android:layout_width="0dp"
    android:layout_weight="2"
    android:layout_height="match_parent"
    android:id="@+id/frag_content"
    />
 </LinearLayout>

and this is mainActivity it contains nothing :

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
}

Upvotes: 1

Views: 788

Answers (1)

Jorgesys
Jorgesys

Reputation: 126445

You need to make a validation to check if the Fragment is attached to its parent using isAdded() method:

if (!isAdded()){
    return;  //Not attached
}else{
   //Attached!
} 

isAdded() Return true if the fragment is currently added to its activity.


Another option, define in your activity the property:

<activity 
            android:configChanges="orientation|keyboardHidden|screenSize">

to avoid the destruction of the parent activity when you rotate the device.

Upvotes: 1

Related Questions