Elly08 Ответов: 0

Изменение вида контейнера с помощью другого макета


Я новичок в Android Studio и хочу получить некоторые рекомендации от опытного человека. Итак, я создал проект с нижней навигационной активностью и имею 1 макет по умолчанию, который является activity_main.xml С этими готовыми нижними навигациями я создал макеты для каждого из них, добавив новый пустой фрагмент.

У меня есть Home, MainActivity, Notifications, Profile, Settings в папке моего пакета (под java). Папка макета имеет activity_main.xml, fragment_home.xml, fragment_notifications.xml, fragment_profile.xml, fragment_settings.xml.

Я хочу сделать fragment_home.xml макет, который будет сначала отображен в контейнере activity_main.xml

Что я понимаю о планировке, так это: activity_main.xml теперь он действует как мастер-контейнер, где его элементы (такие как кнопка, textinput) будут продолжать отображаться даже после того, как я изменю экран просмотра, щелкнув одно из меню из нижней навигационной панели.

Вот что я имею в виду. activity_main.xml :

<!-- I make the tags short just for sample purpose -->

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout>
	<!-- I want to replace this TextView with fragment_home.xml view -->
    <TextView />
	
	<!-- This is the bottom navigation that is already being included -->
    <com.google.android.material.bottomnavigation.BottomNavigationView />
</androidx.constraintlayout.widget.ConstraintLayout>


Это мой MainActivity.java :

public class MainActivity extends AppCompatActivity {
    private TextView mTextMessage;

    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    // I believe that I have to do something here to get the view?
                    getSupportFragmentManager().beginTransaction().replace(R.id.container, new Home()).commit();
                    return true;
                case R.id.navigation_profile:
                    getSupportFragmentManager().beginTransaction().replace(R.id.container, new Profile()).commit();
                    return true;
                case R.id.navigation_notifications:
                    getSupportFragmentManager().beginTransaction().replace(R.id.container, new Notifications()).commit();
                    return true;
                case R.id.navigation_settings:
                    getSupportFragmentManager().beginTransaction().replace(R.id.container, new Settings()).commit();
                    return true;
            }
            return false;
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        BottomNavigationView navView = findViewById(R.id.nav_view);
        mTextMessage = findViewById(R.id.message);
        navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
    }

}


Что я уже пробовал:

Я попробовал заменить
<TextView />
с
<include layout="@layout/fragment_home" />
откуда activity_main.xml но, как я уже сказал, он будет отображаться на каждом экране при переключении.

Как я должен загрузить домашний фрагмент в качестве представления по умолчанию и заменить его другим представлением на основе выбора навигации? Спасибо.

0 Ответов