2015-06-28 36 views
1

我有两个fragment类和应用程序栏中的两个按钮 - 每个按钮执行下列操作之一:如何在一个活动中切换两个片段?

  1. 检查,如果从其他类别fragment存在
  2. 如果存在,则与新更换容器他fragment类的实例
  3. 如果不存在,创建自己的fragment

这里的新实例是示例代码:

private void openReader() { 

    FragmentManager fragmentManager = getFragmentManager(); 

    ArticleListFragment fragmentList = (ArticleListFragment) fragmentManager.findFragmentById(R.id.action_list); 
    ArticleReaderFragment fragmentReader = (ArticleReaderFragment) fragmentManager.findFragmentById(R.id.action_reader); 

    if (fragmentReader==null || ! fragmentReader.isInLayout()) { 

     if (fragmentList==null || ! fragmentList.isInLayout()) { 

      FragmentTransaction ft = fragmentManager.beginTransaction(); 
      ft.add(R.id.container_id, new ArticleReaderFragment()); 
      //ft.addToBackStack(null); 
      ft.commit(); 

     } else { 

      FragmentTransaction ft = fragmentManager.beginTransaction(); 
      ft.replace(R.id.container_id, new ArticleReaderFragment()); 
      //ft.addToBackStack(null); 
      ft.commit(); 

     } 
    } 
    else { 
     // fragment.update(...); 
    } 

} 

这里是activity XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/welcome_page"> 

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/container_id"> 

    </FrameLayout> 

</LinearLayout> 

的问题是,replace功能不destroyingfragment类 - 它被添加在彼此越来越多的片段作为按钮被点击。

任何人都可以告诉我做错了什么吗?

回答

0

我已经犯了很多错误的:

  1. 我没有指定的片段
  2. 的ID因为我不能够动态地设置一个片段ID,我需要使用一个标签,而不是

    ft.replace(R.id.container_id, new ArticleListFragment(), "Action_list"); 
    

    ft.add(R.id.container_id, new ArticleListFragment(), "Action_list"); 
    
  3. 我只需要使用findFragmentByTag(),因为​​总是让我失望。

下面是函数的工作版本:

private void openList() { 

     FragmentManager fragmentManager = getFragmentManager(); 

     ArticleListFragment fragmentList = (ArticleListFragment) fragmentManager.findFragmentByTag("Action_list"); 
     ArticleReaderFragment fragmentReader = (ArticleReaderFragment) fragmentManager.findFragmentByTag("Action_reader"); 

     if (fragmentList==null) { 

      if (fragmentReader==null) { 

       FragmentTransaction ft = fragmentManager.beginTransaction(); 
       ft.add(R.id.container_id, new ArticleListFragment(), "Action_list"); 
       //ft.addToBackStack(null); 
       ft.commit(); 

      } else { 

       FragmentTransaction ft = fragmentManager.beginTransaction(); 
       ft.replace(R.id.container_id, new ArticleListFragment(), "Action_list"); 
       //ft.addToBackStack(null); 
       ft.commit(); 

      } 
     } 
     else { 
      // fragment.update(...); 
     } 
    } 
相关问题