Java 正在调用Android IllegalArgumentException
我有一个应用程序,它有一个带有多个片段的导航栏 看看google play控制台,看看崩溃。我看到一堆Java 正在调用Android IllegalArgumentException,java,android,Java,Android,我有一个应用程序,它有一个带有多个片段的导航栏 看看google play控制台,看看崩溃。我看到一堆java.lang.illegalargumentexpetion 我似乎无法复制这些问题,日志中也没有任何东西指向我的代码 有人能解释出问题出在哪里吗 大多数错误都是这样的,而有些错误的行号不同 java.lang.IllegalArgumentException: at android.support.v4.app.FragmentManagerImpl.moveToState(Fra
java.lang.illegalargumentexpetion
我似乎无法复制这些问题,日志中也没有任何东西指向我的代码
有人能解释出问题出在哪里吗
大多数错误都是这样的,而有些错误的行号不同
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)
编辑:
以下是main活动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;
}
当我在一个片段中,想要转到另一个片段时,我使用以下代码:
// GOTO POS
POSFragment posFragment = new POSFragment();
getFragmentManager().beginTransaction().replace(R.id.fragment_container, posFragment).addToBackStack(null).commit();
当在活动中时,这里是代码:
// 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();
正在发生的是您调用来自不同活动的片段 您正在尝试:
Activity2->accountSettingsFragment
,但实际上它看不到
您需要做的是转到保存accountSettingsFragment
Intent i = new Intent(currentActivity.this,MainActivity.class);
startActivity(i);
正如@OmerHayat在这里回答我的问题时所描述的,我已经解决了这个问题。访问此链接 也把这个放到Try-catch块中
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();
请将代码粘贴到替换的位置fragments@fn5341我编辑以显示我的主要活动,也有其他地方替换片段,例如,当我在新的交易片段中时,我可以转到pos片段检查这一点您在其他活动中有任何片段吗?