2017-03-04 6 views
2

BottomNavigatioViewアイテムのタップを一度に制限するにはどうすればよいですか?誰かがアイテムをスパムしたときに自分のマップフラグメントをリロードする必要はありませんか?BottomNavigatioViewアイテムのタップを一度に制限するには、フラグメントをリロードしないでください。

fragmentManager = getSupportFragmentManager(); 
bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     Fragment fragment = null; 
     Fragment currentFragment = fragmentManager.findFragmentById(R.id.main_container); 
     int id = item.getItemId(); 
     switch (id){ 
      case R.id.World: 
       if (!(currentFragment instanceof MapsFragment)) { 
       fragment = new MapsFragment(); 
        } 
       break; 

      case R.id.Friends: 
       fragment = new FriendsFragment(); 
       break; 


      case R.id.Chats: 
       fragment = new You_Fragment(); 
       break; 
     } 
     final FragmentTransaction transaction = fragmentManager.beginTransaction(); 
     transaction.replace(R.id.main_container, fragment).commit(); 
     return true; 
    } 
}); 

が、フラグメントが発生する、NullPointerをスローするので、それは動作しません:

私の現在のソリューションは、このいずれかです。

私は上記を達成するために何が変更できますか?

+0

どの行がスローンnullポインタですか? –

+0

transaction.replaceフラグメントは2番目のタップでnullなので – Ale4303

答えて

1

試してみてください!私のために働いた:

fragmentManager = getSupportFragmentManager(); 
bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    Fragment fragment = null; 
    Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.main_container); 
    int id = item.getItemId(); 
    switch (id){ 
     case R.id.World: 
      if (currentFragment instanceof MapsFragment) { 

       return false; 

      } else { 

       fragment = new MapsFragment(); 

      } 
      break; 

     case R.id.Friends: 
      fragment = new FriendsFragment(); 
      break; 


     case R.id.Chats: 
      fragment = new You_Fragment(); 
      break; 
    } 
    final FragmentTransaction transaction = fragmentManager.beginTransaction(); 
    transaction.replace(R.id.main_container, fragment).commit(); 
    return true; 
    } 
}); 
関連する問題