4

I have a fragment that most of it's layout is creating programmatically.

First time that fragment appears everything is OK but when I open another fragment and press back button I got IllegalArgumentException.

Please note that Just when I press back button this issue happens , When I call popBackStack everything is ok.

Any suggestion ?

Code :

if(mapView != null)
{
    ViewGroup parent = (ViewGroup) mapView.getParent();
    if (parent != null)
    {
        parent.removeView(mapView);
    }
}
try
{
    // Creating view
    mapView = getBaseActivity().getLayoutInflater().inflate(R.layout.property_show_map_section, (ViewGroup) view, false);
}
catch(Exception e)
{

}
((LinearLayout)view.findViewById(R.id.section_container)).addView(mapView);
final SupportMapFragment googleMap = new SupportMapFragment();
getChildFragmentManager().beginTransaction()
    .replace(R.id.map_container, googleMap).commit();

LogCat :

03-19 18:28:40.229: E/AndroidRuntime(6850): FATAL EXCEPTION: main
03-19 18:28:40.229: E/AndroidRuntime(6850): java.lang.IllegalArgumentException: No view found for id 0x7f0b00e4 (com.example.app:id/map_container) for fragment SupportMapFragment{53056b1c #0 id=0x7f0b00e4}
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:939)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1917)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1800)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:967)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:957)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1541)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.FragmentManagerImpl$2.run(FragmentManager.java:493)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:454)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.os.Handler.handleCallback(Handler.java:730)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.os.Looper.loop(Looper.java:137)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at android.app.ActivityThread.main(ActivityThread.java:5103)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at java.lang.reflect.Method.invokeNative(Native Method)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at java.lang.reflect.Method.invoke(Method.java:525)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-19 18:28:40.229: E/AndroidRuntime(6850):     at dalvik.system.NativeStart.main(Native Method)
Morteza Soleimani
  • 2,652
  • 3
  • 25
  • 44

1 Answers1

3

You might want to override the onBackPressed() method in your second activity.

If you are in a fragment, you can might do:

public boolean onKeyDown(int keyCode, KeyEvent event) {

        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:

                return true
        }
        return false;
}

Or, you might try to change the getChildFragmentManager() to getFragmentManager() or getSupportFragmentManager(), if the code you posted is in an Activity.

getChildFragmentManager() is more for Fragment, and getFragmentManager() is more for Activity. You can see this answer for more details.

Community
  • 1
  • 1
ztan
  • 6,861
  • 2
  • 24
  • 44
  • Thank you for your answer , I am using above code in a fragment , So I don't have access to `onBackPressed` , And I think it's not a good solution to override onBackPressed . – Morteza Soleimani Mar 19 '15 at 17:02
  • 1
    Is the code you posted from an Activity? Then you might change `getChildFragmentManager()` to `getFragmentManager()` or `getSupportFragmentManager()` – ztan Mar 19 '15 at 17:04
  • +1 for your solution to override backpressed but I think Overriding back buttion to fix this issue is not a good solution. Thanks for your assist :) – Morteza Soleimani Mar 19 '15 at 17:14
  • Replacing getChildFragmentManager with getfragmentManager fixed the issue even now that I am coding inside a fragment instead of an Activity , Thanks ;) – Morteza Soleimani Mar 19 '15 at 18:52