2017-01-11 14 views
0

私は再現できないクラッシュスティックスでクラッシュし、どこに発生するのかわかりません。受け取ったすべてのログを以下に転記してください。あなたはandroid.support.design.internalのクラスですNavigationMenuPresenterとNavigationMenuAdapterログから見ることができるようにConcurrentModificationException - アクティビティを開始できません

Fatal Exception: java.lang.RuntimeException 
Unable to start activity ComponentInfo{.main.MainActivity}: java.util.ConcurrentModificationException 
Caused by java.util.ConcurrentModificationException 
java.util.ArrayList$ArrayListIterator.next (ArrayList.java:573) 
android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.restoreInstanceState (NavigationMenuPresenter.java:587) 
android.support.design.internal.NavigationMenuPresenter.onRestoreInstanceState (NavigationMenuPresenter.java:191) 

。 Navigation DrawerメニューといくつかのArrayList(私が間違っている場合は私を修正してください)と関係があるように、その名前から見えます。メニューの状態を復元しようとすると、何らかのエラーが発生しますか?ここで

は、ナビゲーションメニューを作成するためのコード

private void setupDrawer(Toolbar toolbar) { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.addDrawerListener(toggle); 
     toggle.syncState(); 
     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
     initAvailabilityChange(navigationView); 
     initMenuHeaderViews(navigationView); 
    } 

    private void initAvailabilityChange(NavigationView navigationView) { 
     switchItem = navigationView.getMenu().findItem(R.id.availability); 
     CompoundButton switchView = (CompoundButton) MenuItemCompat.getActionView(switchItem); 
     switchNew = (Switch) switchView.findViewById(R.id.switchLocation); 
     switchView.setOnCheckedChangeListener((buttonView, isChecked) -> { 
      isOnShift = isChecked; 
      presenter.onAvailabilityChange(isOnShift, this); 
      if (isChecked) { 
       switchItem.setTitle(R.string.availability_on_shift); 
      } else { 
       switchItem.setTitle(R.string.availability_off_shift); 
      } 
     }); 
    } 

    private void initMenuHeaderViews(NavigationView navigationView) { 
     View header = navigationView.getHeaderView(0); 
     tvName = (TextView) header.findViewById(R.id.tvName); 
     tvRank = (TextView) header.findViewById(R.id.tvRank); 
    } 

は、任意の助けのために本当に感謝されるです。

+1

ArrayListを反復処理してループの項目を変更するコードを調べる必要があります。そのコードを共有してください: –

+0

あなたの投稿に 'NavigationMenuPresenter.java:587'のコードを追加してください。 – torkleyy

+0

' onRestoreInstanceState() 'であなたのコードを共有できますか? NavigationMenuPresenter @torkleyy – hsl

答えて

1

ViewGroupの実装に問題がある可能性があります。新しいRunnableを投稿してみてください。

switchView.post(new Runnable() { 
    public void run() { 
    if (isChecked) { 
       switchItem.setTitle(R.string.availability_on_shift); 
      } else { 
       switchItem.setTitle(R.string.availability_off_shift); 
      } 
    } 
}); 
+0

それはやった!よかった。ありがとう。 –

関連する問題