Android 导航抽屉默认片段

Android 导航抽屉默认片段,android,android-fragments,Android,Android Fragments,我是一名新手开发人员,我正在将应用程序中的导航抽屉与android support v7集成,我有一个问题。启动应用程序时,主要布局如下: <?xml version="1.0" encoding="utf-8"?> 这是我的主要活动: drawerList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(Adapte

我是一名新手开发人员,我正在将应用程序中的导航抽屉与android support v7集成,我有一个问题。启动应用程序时,主要布局如下:

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


这是我的主要活动:

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);
        }
    });
drawerList.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
片段=空;
开关(位置){
案例0:
片段=新片段1();
打破
案例1:
片段=新片段2();
打破
案例2:
片段=新片段3();
打破
案例3:
片段=新片段4();
打破
}
碎片管理器碎片管理器=
getSupportFragmentManager();
fragmentManager.beginTransaction()
.替换(R.id.content\u框架、片段)
.commit();
抽屉列表。setItemChecked(位置,真);
titoloseccion=操作菜单[位置];
getSupportActionBar().setTitle(titoloseccion);
抽屉布局。封闭抽屉(抽屉列表);
}
});

如何设置应用程序的默认片段式主布局?谢谢

如果您可以在每次创建活动时加载默认片段,您可以在
onCreate()中放置
FragmentTransaction

看起来像这样:

@Override
public void onCreate(Bundle savedInstanceState){

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


}
如果您想要一种更复杂的方法来执行此操作(例如,当您返回到主活动时切换到不同的片段),您可以在
onCreate()
中使用一个
Intent
,并在
onCreate()
中使用附加程序来确定片段,在加载附加程序时,您只需将默认片段放入
defaultValue

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

    ...

}

如果这是您的意思,那么您不能在XML中执行。您可以在活动的onCreate中执行此操作。例如:

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

其中,selectItem是用于在抽屉中选择片段的方法,如google的示例所示,0是默认片段的位置。

将其放在主活动中onCreate()的末尾

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

在开关代码中添加默认大小写

    @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;
        }
@覆盖
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
片段=空;
开关(位置){
案例0:
片段=新片段1();
打破
案例1:
片段=新片段2();
打破
案例2:
片段=新片段3();
打破
案例3:
片段=新片段4();
打破
违约:
片段=新片段1();
打破
}
在oncreate中尝试以下操作:

Fragment fragment = null;
fragment = new HomeFragment();                                                              
//HomeFragment= fragment class to launch that
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.screen_area, fragment);
fragmentTransaction.commit();

它的帮助,它是工作

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_page);

    FragmentManager fragmentManager= getFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.content_frame
                    ,new YourClass())
            .commit();
}

如果您使用的是Android Studio底部导航模板:

  • 转到app/src/main/res/navigation/mobile_navigation.xml
  • 将“app:startDestination”更改为要在加载时显示的片段

  • 希望这能帮助像我这样经验不足的人使用模板。

    我花了5个小时试图弄明白这一点,当你掌握了诀窍时,这很简单。谢谢,这让我省去了更多的时间。很高兴听到@user2029541my第一个fragmnet 0位置片段每次加载,甚至将另一个活动移动到主view如何解决此解决方案将在用户更改手机方向时返回默认片段。例如,您应该检查片段是否尚未设置为@sorianiv的答案中的片段,并且仅在片段为空时执行事务。您可以在下面的帖子中找到我的答案,给出我无法解决的方法selectItem(int)。@Jemshit iskenderova添加一些描述,逻辑将比一段代码更有用。
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_page);
    
        FragmentManager fragmentManager= getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.content_frame
                        ,new YourClass())
                .commit();
    }