【发布时间】:2018-02-27 00:08:23
【问题描述】:
可能与
重复java.lang.IllegalArgumentException when switching fragments但问题的场景与这个链接不同。
这是我的代码
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();
}
}
以下是谷歌控制台捕获的stacktrace,搜索后仍然没有得到解决方案。如果有人有更好的解决方案或有同样的问题,请告诉我。
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)
我们将不胜感激
【问题讨论】:
-
尝试使用 ft.commitAllowingStateLoss();安装 ft.commit(); stackoverflow.com/a/18345684/5069323
-
尝试替换 ft.replace(R.id.flContent, fragment);用 ft.replace(R.id.flContent, fragment,fragment.getClass().getName());
-
@PratikTank 和 SagarVasoya 我会检查这些选项,但你确定这会解决问题吗?因为我自己无法重现问题。这已被 Google Play 控制台捕获。
标签: android performance android-layout android-studio android-fragments