Сделать альбомный макет в навигационном ящике

В моем приложении есть панель навигации, состоящая из контейнера основного фрагмента, который меняется с другими фрагментами, когда я хочу сменить страницу. Если переключиться на альбомную ориентацию, когда я нахожусь на другой странице, приложение вернется на домашнюю страницу (контейнер фрагментов). И то же самое, если я переключусь с альбомной на портретную. Как я могу решить эту проблему? Я думаю, что мне нужно что-то изменить в основной деятельности, но я действительно не знаю, как это сделать.

Моя java на самом деле такая.

    public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
        NavigationView navigationView = null;
        MainFragment fragment = new MainFragment();
        android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container,fragment);
        fragmentTransaction.commit();

        public boolean onNavigationItemSelected(MenuItem item) {
            // Handle navigation view item clicks here.
            int id = item.getItemId();
            if (id == R.id.nav_home) {
                MainFragment fragment = new MainFragment();
                android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.fragment_container, fragment);
                fragmentTransaction.commit();
            } else if (id == R.id.nav_breed) {
                // Handle the camera action
                BreedFragment fragment = new BreedFragment();
                android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.fragment_container, fragment);
                fragmentTransaction.commit();
            }
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            drawer.closeDrawer(GravityCompat.START);
            return true;
        }
    }

person Marco Panarelli    schedule 07.04.2016    source источник
comment
попробуйте этот код github github.com/samerzmd/   -  person Muhammad Waleed    schedule 07.04.2016


Ответы (2)


То, что вы сделали, определив android:configChanges="keyboardHidden|orientation" в своем AndroidManifest.xml, по сути, говорит Android: «Эй, спасибо за вашу крутость, но НЕ выполняйте операции по умолчанию, когда телефон поворачивается или изменяется доступность клавиатуры. Я несу полную ответственность и могу займись этим сам».

Таким образом, кажется, вы решили проблему, но просто чтобы дать вам больше ясности в дальнейшем, проблема (как вы уже знаете) связана с вращением. Итак, я полагаю, что следующие строки выше существуют в onCreate вашего MainActivity?

NavigationView navigationView = null;
MainFragment fragment = new MainFragment();
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container,fragment);
fragmentTransaction.commit();

До того, как вы указали android:configChanges="keyboardHidden|orientation" в своем AndroidManifest.xml, onCreate вашего MainActivity вызывался каждый раз при изменении ориентации устройства.

Так как же на самом деле решить проблему? Документация Android лучше всего объясняет это и все, что я только что изложил здесь.

Да, это требует больше работы, но это стоит понять и дать себе возможность принимать правильные решения соответственно.

person ade.akinyede    schedule 09.04.2016

Я решаю проблему. Вам просто нужно добавить android:configChanges="screenSize|orientation" к AndroidManifest.xml, и тогда вы можете вращать похоне, не возвращаясь к домашнему фрагменту.

person Marco Panarelli    schedule 09.04.2016