Фрагмент по умолчанию для блока навигации
Я начинающий разработчик, и я интегрирую навигационный ящик в свое приложение с поддержкой 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;
}