当屏幕方向改变时,Android片段在彼此之上显示

时间:2016-01-02 10:31:30

标签: android android-fragments

我有一个导航菜单,它向用户显示各种操作模式。当用户选择特定选项时,活动是加载相应的片段(例如:添加产品应该加载AddProduct片段)。

加载工作正常 - 我使用FragmentManager和FragmentTransaction将当前片段替换为新片段。当屏幕旋转时出现问题 - 我使用的当前两个片段彼此重叠显示。

以下是我为NavigationDrawerListener设置的代码(执行加载的部分):

  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    DrawerLayout drawerLayout = (DrawerLayout) currentActivty.findViewById(R.id
            .homeDrawer);
    TextView heading = (TextView) currentActivty.findViewById(R.id.AppHeadingTextView);
    switch (position)
    {
        case 0:
            heading.setText("Home");
            drawerLayout.closeDrawers();
            UserMainScreenFragment homeScreen = new UserMainScreenFragment();
            FragmentManager homeManager = currentActivty.getFragmentManager();
            FragmentTransaction homeTransaction = homeManager.beginTransaction();
            homeTransaction.replace(R.id.contentArea, homeScreen);
            homeTransaction.commit();
            break;
        case 2:
            heading.setText("Add a Product");
            drawerLayout.closeDrawers();
            AddProductFragment newProductFragment = new AddProductFragment();
            FragmentManager manager = currentActivty.getFragmentManager();
            FragmentTransaction replace = manager.beginTransaction();
            replace.replace(R.id.contentArea, newProductFragment);
            replace.commit();
           break;
    }
}

3 个答案:

答案 0 :(得分:0)

您需要根据方向为所需活动创建单独的布局。

答案 1 :(得分:0)

您必须为两个方向添加不同的布局(同名),然后Android会根据方向自动为合适的xml充气。

文件结构将如下所示,

res
 - drawable
 - layout                        // for portrait
    - layout_name.xml            
 - layout-land                   // for landscape
    - layout_name.xml            // same name should be used
 - .....

查找示例解决方案here

答案 2 :(得分:0)

在您的活动中,您需要检查savedInstanceState是否为null,以避免再次添加相同的片段:

//when the orientation changes, the savedInstanceState bundle is not null
if(savedInstanceState!=null){
//add your fragment to the layout
}

另一件事,我注意到你通过currentActivty.getFragmentManager()引用片段管理器;

也许 currentActivty.getFragmentManager(); 对被销毁的活动有一个旧的引用,如果你正在使用支持,你还应该使用 getSupportFragmentManager()文库