1

Mögliche Duplikate mit RuntimeException: java.lang.IllegalArgumentException mit MainActivity.onStart

java.lang.IllegalArgumentException when switching fragments
Aber das Szenario des Problems ist dieser Link anders.

Hier ist mein Code

public class MainActivity extends AppCompatActivity{   
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_layout); 
    bindWidgetsWithAnEvent(); 
} 
private void bindWidgetsWithAnEvent() { 
    tabsLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(final TabLayout.Tab tab) { 
      setCurrentTabFragment(tab.getPosition()); 
      Log.d(TAG, "Position " + tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
      Log.d(TAG, String.valueOf(tab.getPosition())); 
     } 
    }); 
} 
public void setCurrentTabFragment(int tabPosition) { 
    switch (tabPosition) { 
     case 0: 
      replaceFragment(fragmentName); 
      break; 
     case 1: 
      replaceFragment(fragmentName); 
      break; 
     default: 
      break; 
    } 
} 
public void replaceFragment(Fragment fragment) { 
    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.replace(R.id.flContent, fragment); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    ft.commit(); 
} 
@Override 
protected void onStart() { 
    super.onStart(); 
} 
} 

Die unter der Stacktrace von Google Konsole gefangen ist, und immer noch nicht die Lösung erhalten nach der Suche. Bitte lassen Sie mich wissen, wenn jemand eine bessere Lösung hat oder das gleiche Problem hat.

java.lang.IllegalStateException: 
    at android.support.v4.app.FragmentManagerImpl.checkStateLoss (FragmentManager.java:1842) 
    at android.support.v4.app.FragmentManagerImpl.enqueueAction (FragmentManager.java:1860) 
    at android.support.v4.app.BackStackRecord.commitInternal (BackStackRecord.java:650) 
    at android.support.v4.app.BackStackRecord.commit (BackStackRecord.java:609) 
    at com.safarifone.waafi.ui.activities.MainActivity.replaceFragment (MainActivity.java:354) 
    at com.safarifone.waafi.ui.activities.MainActivity.setCurrentTabFragment (MainActivity.java:336) 
    at com.safarifone.waafi.ui.activities.MainActivity$3.onTabSelected (MainActivity.java:303) 
    at android.support.design.widget.TabLayout.dispatchTabSelected (TabLayout.java:1164) 
    at android.support.design.widget.TabLayout.selectTab (TabLayout.java:1157) 
    at android.support.design.widget.TabLayout.selectTab (TabLayout.java:1127) 
    at android.support.design.widget.TabLayout$Tab.select (TabLayout.java:1426) 
    at android.support.design.widget.TabLayout$TabView.performClick (TabLayout.java:1536) 
    at android.view.View$PerformClick.run (View.java:20300) 
    at android.os.Handler.handleCallback (Handler.java:815) 
    at android.os.Handler.dispatchMessage (Handler.java:104) 
    at android.os.Looper.loop (Looper.java:210) 
    at android.app.ActivityThread.main (ActivityThread.java:5833) 
    at java.lang.reflect.Method.invoke (Native Method) 
    at java.lang.reflect.Method.invoke (Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1113) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:879) 

Hilfe wird

+0

versuchen Sie es mit ft.commitAllowingStateLoss(); anstelle von ft.commit(); https://stackoverflow.com/a/18345684/5069323 –

+0

versuchen, ft.replace (R.id.flContent, Fragment) zu ersetzen; mit ft.replace (R.id.flContent, fragment, fragment.getClass(). getName()); –

+0

@PratikTank und SagarVasoya Ich werde mit diesen Optionen überprüfen, aber Sie sind sicher, dass dies das Problem lösen wird. Weil ich das Problem nicht selbst reproduzieren kann. Dies wird von der Google Play-Konsole erfasst. –

Antwort

2

Grundsätzlich geschätzt werden, wenn Sie Fragment ersetzen es seinen Zustand Verlust dieses ist sehr Bug in Android OS kennen und es meistens geschieht, wenn Sie Ihre Aktivität in OnPause Zustand befindet. Ich habe ein ähnliches Problem und löse es so, indem ich eine boolsche Variable einfüge und im Catch-Block true setze. Sie können diesen Fehler reproduzieren, fügen Sie einfach post dealy von 10 bis 15 Sekunden, während das Fragment commit und führen Sie Ihre Aktivität und setzen Sie es in Pause Zustand nach 10 15 Sekunden können Sie Absturz finden, wenn es versuchen, Fragment wenn Aktivität im Onpause-Zustand zu begehen.

public void replaceFragment(Fragment fragment) { 
try { 
    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.replace(R.id.flContent, fragment); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    ft.commit(); 
    }catch (Exception e) 
      { 
       stateSaveFragment = true; 
       e.printStackTrace(); 
      } 
} 

Und in der Post Lebenslauf Methode der Aktivität ersetzen Ihr Fragment und setzen stateSaveFragment wieder falsch. Ich löse es so, dass es dir hilft.

@Override 
protected void onPostResume() { 
    super.onPostResume(); 
    if(stateSaveFragment){ 
     replaceFragment(fragmentName); 
    } 
    stateSaveFragment=false; 
} 
+0

Danke für die Antwort Ich werde auch diesen Fehler los, indem Sie diesen Ansatz verwenden. Daumen hoch! –

Verwandte Themen