2017-08-15 10 views
-1

MainActivity.javaに3つのフラグメントがあるBottom Navigationがあります。 私のフラグメントの1つを、アプリケーションの起動時に自動的に開くようにデフォルトに設定したいとします。 どうすればいいですか? これは私の主な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

可能な重複として「デフォルトのフラグメント」を設定するには、次のメソッドを呼び出して、活動のonBackPressedと呼ばれるinterfaceを実装しました](https://stackoverflow.com/questions/22296531/navigation-drawer-default-fragment) –

答えて

1

savedInstanceStateは、初回起動時にのみコードを実行するようにアクティビティが初めて作成されたときに利用できます。 setSelectedItemId()を使用して、選択したいナビゲーション項目を設定することができます。

setSelectedItemId()OnNavigationItemSelectedListenerをトリガーするので、setOnNavigationItemSelectedListener()に電話した後にこのコードを入力する必要があります。 BottomNavigationViewライブラリで

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

提示されるデフォルトのフラグメントの定義はありません、それはあなたのベンが指摘したように、プログラムを設定することにより、表示されているフラグメントの合計に制御することができます。

私はこれまでにこれを実装していますが、あなたはおそらく "デフォルト"の断片に戻ってほしいバックプレスの問題に直面していると思います。私の場合は、ユーザーがバスクプレスをヒットしたら、ちょうど[ナビゲーションドロワーデフォルトのフラグメントの選択

bottomNavigationView.setSelectedItem(R.id.myDefaultTabID); 
関連する問題