【问题标题】:Navigation drawer default fragment导航抽屉默认片段
【发布时间】:2014-03-10 09:37:14
【问题描述】:

我是新手开发人员,我正在将导航抽屉与 android-support 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);
        }
    });

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

【问题讨论】:

标签: android android-fragments


【解决方案1】:

如果你可以在每次创建activity时加载默认fragment,你可以在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();


}

如果您想要一种更复杂的方式来执行此操作(例如,当您返回主要活动时切换到不同的片段),您可以使用 Intent 和附加值来确定 onCreate() 中的片段,您可以在其中只需在加载额外内容时将默认片段放在defaultValue 中即可:

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

    ...

}

【讨论】:

  • 我花了 5 个小时试图弄清楚这一点,当你知道如何做之后就很简单了。谢谢,这为我节省了更多的挣扎时间..
  • 很高兴听到@user2029541
  • 我的第一个 fragmnet 0 th 位置片段每次加载甚至将另一个活动移动到主视图如何解决
  • 例如当用户改变手机的方向时,这个解决方案会回到默认的片段。您应该检查片段是否尚未按照@sorianiv 的答案设置,并且仅在片段为空时才进行事务
【解决方案2】:

把它放在主活动中 onCreate() 的末尾。

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

【讨论】:

  • 给我无法解析方法 selectItem(int).@Jemshit Iskenderov
【解决方案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】:

    在 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();
    

    【讨论】:

      【解决方案5】:

      它的帮助,它正在工作

       @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();
      }
      

      【讨论】:

      • 添加一些描述,逻辑会比一段代码更有帮助。
      【解决方案6】:

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

      1. 转到 app/src/main/res/navigation/mobile_navigation.xml
      2. 将“app:startDestination”更改为您希望在加载时显示的片段。

      希望这可以帮助像我这样经验不足的人使用该模板。

      【讨论】:

        【解决方案7】:

        在您的切换代码中添加默认情况。

            @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;
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-16
          • 1970-01-01
          • 2018-01-16
          • 2016-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多