Фрагмент по умолчанию для блока навигации

Я начинающий разработчик, и я интегрирую навигационный ящик в свое приложение с поддержкой android v7, и у меня есть один вопрос. Когда я запускаю приложение, основной макет таков:

<?xml version="1.0" encoding="utf-8"?>

<!-- The main content view -->

<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<!-- The navigation drawer -->

<ListView
    android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@android:color/white"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp" />

и это моя основная деятельность:

drawerList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            Fragment fragment = null;

            switch (position) {
                case 0:
                    fragment = new Fragment1();
                    break;
                case 1:
                    fragment = new Fragment2();
                    break;
                case 2:
                    fragment = new Fragment3();
                    break;  
                case 3:
                    fragment = new Fragment4();
                    break;
            }

            FragmentManager fragmentManager = 
                    getSupportFragmentManager();

            fragmentManager.beginTransaction()
                    .replace(R.id.content_frame, fragment)
                    .commit();

            drawerList.setItemChecked(position, true);

            tituloSeccion = opcionesMenu[position];
            getSupportActionBar().setTitle(tituloSeccion);

            drawerLayout.closeDrawer(drawerList);
        }
    });

Как установить по умолчанию фрагмент, как основной макет приложения? Спасибо вам

Ответы

Ответ 1

Если вам нормально загружать фрагмент по умолчанию каждый раз, когда создается ваша активность, вы можете поместить FragmentTransaction в onCreate()

Выглядит примерно так:

@Override
public void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
    FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
    tx.replace(R.id.content_frame, new Fragment1());
    tx.commit();


}

Если вам нужен более сложный способ сделать это (например, переключение на другой фрагмент, когда вы вернетесь к основному действию), вы можете использовать Intent с дополнительными функциями, определяющими фрагмент в onCreate(), где вы просто поместите свой фрагмент по умолчанию в defaultValue после загрузки дополнительного файла:

int position = getIntent().getIntExtra("position", 1);
switch(position){

    ...

}

Ответ 2

Поместите это в конец onCreate() в Основной Activity.

 if (savedInstanceState == null) {
        selectItem(0);
 }

Ответ 3

Вы не можете сделать это в XML, если это то, что вы имеете в виду. Вы делаете это в onCreate своей деятельности. Например:

if (getFragmentManager().findFragmentById(R.id.content_frame) == null) {
  selectItem(0);
}

где selectItem - это метод, который вы используете для выбора фрагментов в вашем ящике, как в примере Google https://developer.android.com/training/implementing-navigation/nav-drawer.html, а 0 - позиция фрагмент по умолчанию.

Ответ 4

Добавьте код по умолчанию в код коммутатора.

    @Override 
       public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {

        Fragment fragment = null;
        switch (position) {
            case 0:
                fragment = new Fragment1();
                break;
            case 1:
                fragment = new Fragment2();
                break;
            case 2:
                fragment = new Fragment3();
                break;  
            case 3:
                fragment = new Fragment4();
                break;
            default:
                fragment = new Fragment1();
                break;
        }