Изменение вида контейнера с помощью другого макета
Я новичок в 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 но, как я уже сказал, он будет отображаться на каждом экране при переключении.
Как я должен загрузить домашний фрагмент в качестве представления по умолчанию и заменить его другим представлением на основе выбора навигации? Спасибо.