2015-06-28 35 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(...); 
     } 
    } 
相關問題