2017-08-15 49 views
-1

我在我的MainActivity.java中有3個片段的底部導航。 我想將我的片段之一設置爲默認值,以便在應用程序啓動時自動打開。 我該怎麼做? 這是我的主要Activity.java:如何將片段設置爲BottomNavigation的默認片段?

public class MainActivity extends AppCompatActivity { 
private static final String TAG = MainActivity.class.getSimpleName(); 
private BottomNavigationView bottomNavigation; 
private Fragment fragment; 
private android.support.v4.app.FragmentManager fragmentManager; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    bottomNavigation = (BottomNavigationView)findViewById(R.id.bottom_navigation); 
    bottomNavigation.inflateMenu(R.menu.bottom_menu); 
    fragmentManager = getSupportFragmentManager(); 



    bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
      Fragment selectedFragment = null; 
      int id = item.getItemId(); 
      switch (id){ 
       case R.id.intros: 
        fragment = new IntrosFragment(); 
        break; 
       case R.id.menus: 
        fragment = new MenusFragment(); 
        break; 
       case R.id.infos: 
        fragment = new InfosFragment(); 
        break; 
      } 
      FragmentTransaction transaction = fragmentManager.beginTransaction(); 
      transaction.replace(R.id.main_container, fragment).commit(); 
      return true; 
     } 
    }); 


} 
} 

,這是一個我例如片段(它們都是一樣的):

public class IntrosFragment extends Fragment { 


public IntrosFragment() { 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_intro, container, false); 
    // Inflate the layout for this fragment 
    TextView txt = (TextView) rootView.findViewById(R.id.introtv); 
    Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/naskh.ttf"); 
    txt.setTypeface(font); 

    return rootView; 
} 
} 

我該怎麼辦?

+0

[抽屜式導航默認片段的可能的複製](https://stackoverflow.com/questions/22296531/navigation-drawer-default-fragment) –

回答

1

您可以利用這樣一個事實:savedInstanceState在第一次創建活動時只能在第一次啓動時執行代碼。您可以使用setSelectedItemId()來設置您想要選擇的導航項目。

請注意,setSelectedItemId()會觸發您的OnNavigationItemSelectedListener,所以您應該在撥打setOnNavigationItemSelectedListener()後再將此代碼放入。

if (savedInstanceState == null) { 
     bottomNavigation.setSelectedItemId(R.id.infos); // change to whichever id should be default 
    } 
0

BottomNavigationView庫沒有默認片段的定義來呈現,它可以讓你完全控制這些片段是通過編程將其設置爲奔指出可見。

我已經實現了這個不遠之前,我相信你正面臨後面的問題,你可能想回到「默認」片段。在我來說,我實現了一個interface這就是所謂的活動onBackPressed,一旦用戶點擊防曬按只需調用下面的方法來設置「默認片段」選擇

bottomNavigationView.setSelectedItem(R.id.myDefaultTabID);