2017-06-12 1 views
0

J'ai une application qui a une barre de navigation avec plusieurs fragments.Android IllegalArgumentException étant appelé

En regardant la console de jeu google, et en regardant les accidents. Je vois un tas de java.lang.IllegalArgumentExcpetion

Je ne peux pas sembler reproduire les problèmes, et dans les journaux rien pointe vers mon code.

Quelqu'un peut-il déchiffrer ce qui pourrait être le problème?

La plupart des erreurs ressemblent à ceci alors que d'autres ont des numéros de ligne différents.

java.lang.IllegalArgumentException: 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1293) 
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758) 
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) 
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 
    at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013) 
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:158) 
    at android.app.ActivityThread.main(ActivityThread.java:7225) 
    at java.lang.reflect.Method.invoke(Native Method:0) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

EDIT: Voici la fonction MainActivity onNavigationItemSelected:

switch (id) { 

    case R.id.dashboard: 
     if (currentFragment instanceof DashboardFragment) break; 
     // SET DASHBOARD FRAGMENT 
     DashboardFragment fragment = new DashboardFragment(); 
     fragmentTransaction.replace(R.id.fragment_container, fragment); 
     fragmentTransaction.commit(); 
     break; 
    case R.id.new_trans: 

     // CLEAR 
     staticTransaction.reset(); 
     staticCart.reset(); 

     if (currentFragment instanceof newTransFragment) break; 
     // SET NEW TRANS FRAGMENT 
     newTransFragment newTransFragment = new newTransFragment(); 
     fragmentTransaction.replace(R.id.fragment_container, newTransFragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
     break; 
    case R.id.trans_history: 
     if (currentFragment instanceof transHistoryFragment) break; 
     // SET TRANS HISTORY FRAGMENT 
     transHistoryFragment transHistoryFragment = new transHistoryFragment(); 
     fragmentTransaction.replace(R.id.fragment_container, transHistoryFragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
     break; 
    case R.id.orders: 
     if (currentFragment instanceof OrdersFragment) break; 
     // SET ORDERS FRAGMENT 
     OrdersFragment ordersFragment = new OrdersFragment(); 
     fragmentTransaction.replace(R.id.fragment_container, ordersFragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
     break; 
    case R.id.pos: 

     // CLEAR 
     staticTransaction.reset(); 
     staticCart.reset(); 

     if (currentFragment instanceof POSFragment) break; 
     // SET POS FRAGMENT 
     POSFragment posFragment = new POSFragment(); 
     fragmentTransaction.replace(R.id.fragment_container, posFragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
     break; 
    case R.id.products_list: 
     if (currentFragment instanceof ProductsFragment) break; 
     // SET PRODUCTS FRAGMENT 
     ProductsFragment productsFragment = new ProductsFragment(); 
     fragmentTransaction.replace(R.id.fragment_container, productsFragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
     break; 
    case R.id.customers_list: 
     if (currentFragment instanceof CustomersFragment) break; 
     // SET CUSTOMERS FRAGMENT 
     CustomersFragment customersFragment = new CustomersFragment(); 
     fragmentTransaction.replace(R.id.fragment_container, customersFragment); 
     fragmentTransaction.commit(); 
     break; 
    case R.id.account_settings: 
     if (currentFragment instanceof accountSettingsFragment) break; 
     // SET ACCOUNT SETTINGS FRAGMENT 
     accountSettingsFragment accountSettingsFragment = new accountSettingsFragment(); 
     fragmentTransaction.replace(R.id.fragment_container, accountSettingsFragment); 
     fragmentTransaction.commit(); 
     break; 
    case R.id.settings: 
     if (currentFragment instanceof settingsFragment) break; 
     // SET SETTINGS FRAGMENT 
     settingsFragment settingsFragment = new settingsFragment(); 
     fragmentTransaction.replace(R.id.fragment_container, settingsFragment); 
     fragmentTransaction.commit(); 
     break; 
    case R.id.test_connection: 
     if (currentFragment instanceof testConnectionFragment) break; 
     // SET TEST CONNECTION FRAGMENT 
     testConnectionFragment testConnectionFragment = new testConnectionFragment(); 
     fragmentTransaction.replace(R.id.fragment_container, testConnectionFragment); 
     fragmentTransaction.commit(); 
     break; 
    case R.id.sync: 
     if (currentFragment instanceof SyncFragment) break; 
     SyncFragment syncFragment = new SyncFragment(); 
     fragmentTransaction.replace(R.id.fragment_container, syncFragment); 
     fragmentTransaction.commit(); 
     break; 

} 

Quand je suis à l'intérieur d'un fragment et que vous souhaitez goto une autre, c'est le code que j'utilise pour le faire:

// GOTO POS 
POSFragment posFragment = new POSFragment(); 
getFragmentManager().beginTransaction().replace(R.id.fragment_container, posFragment).addToBackStack(null).commit(); 

Lorsque l'intérieur d'une activité est le code ici:

// GOTO ACCOUNT SETTINGS 
accountSettingsFragment fragment = new accountSettingsFragment(); 
FragmentTransaction fragmentTransaction = CustomerViewActivity.this.getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.fragment_container, fragment); 
Bundle bundle = new Bundle(); 
bundle.putInt("timedOut", 1); 
fragment.setArguments(bundle); 
fragmentTransaction.commit(); 
+0

S'il vous plaît coller le code où vous remplacez des fragments – fn5341

+0

@ fn5341 j'edited pour montrer mon activité principale, il y a aussi d'autres endroits qui remplacent le fragment , exemple quand je suis dans un nouveau fragment de transaction, je peux aller au fragment pos – Derek

+0

Consultez cette [question] (https://stackoverflow.com/questions/25665642/java-lang-illegalargumentexception-no-view-found- for-id-0x1020002-androidid-c) – fn5341

Répondre

1

Ce qui se passe est votre appeler un fragment d'une autre activité

Vous essayez: Activity2 -> accountSettingsFragment qui ne peut pas voir réellement.

Ce que vous devez faire est de goto le MainActivity qui détient le accountSettingsFragment

Intent i = new Intent(currentActivity.this,MainActivity.class); 
startActivity(i); 
0

J'ai résolu ce problème, comme décrit par @OmerHayat répondu à ma question ici. Visitez ce lien Here

également tout mettre dans le bloc catch Essayez

accountSettingsFragment fragment = new accountSettingsFragment(); 
FragmentTransaction fragmentTransaction = CustomerViewActivity.this.getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.fragment_container, fragment); 
Bundle bundle = new Bundle(); 
bundle.putInt("timedOut", 1); 
fragment.setArguments(bundle); 
fragmentTransaction.commit();