2012-10-18 3 views
3

하나의 작업 표시 줄 탭에 여러 조각이있을 가능성에 대해 웹에서 많이 검색했습니다.Android - 하나의 탭에 여러 조각이 있음

This question은 내 요구 사항에 가장 가깝지만 코드가 작동하지 않습니다.

하나의 탭에 여러 조각을 포함 할 수 있습니까?


해당 레이아웃 acticity_start가 탭에 배치 될 두 단편 두 프레임 레이아웃을 포함 StartActivity

public class StartActivity extends FragmentActivity implements ActionBar.TabListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_start); 

     // Set up the action bar. 
     final ActionBar actionBar = getActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     actionBar.addTab(
       actionBar.newTab() 
      .setText("Karte") 
       .setTabListener(new MapFragmentListener(this))); 

    } 

이다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <FrameLayout 
     android:id="@+id/fragment_map" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
    <FrameLayout 
     android:id="@+id/fragment_realtime" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 

TabListener은 다음과 같다 :

private class TabListener implements ActionBar.TabListener { 

     private static final String fragment1_tag = "fragment1_tag"; 
     private static final String fragment2_tag = "fragment2_tag"; 

     private FragmentActivity activity; 
     private RealtimeFragment fragment1; 
     private RealtimeFragment fragment2; 

     public TabListener(FragmentActivity activity) { 

      this.activity = activity; 

      android.support.v4.app.FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); 

      fragment1 = (RealtimeFragment) activity.getSupportFragmentManager().findFragmentByTag(fragment1_tag); 
      if (fragment1 != null && !fragment1.isDetached()) { 
       ft.detach(fragment1); 
      } 

      fragment2 = (RealtimeFragment) activity.getSupportFragmentManager().findFragmentByTag(fragment2_tag); 
      if (fragment2 != null && !fragment2.isDetached()) { 
       ft.detach(fragment2); 
      } 

      ft.commit(); 
     } 

     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 

      android.support.v4.app.FragmentTransaction fragmentTransaction = activity.getSupportFragmentManager().beginTransaction(); 

      if(fragment1 == null) { 
       fragment1 = new RealtimeFragment(); 
       fragmentTransaction.add(R.id.fragment_map, fragment1, fragment1_tag); 
      } else { 
       fragmentTransaction.attach(fragment1); 
      } 


      if(fragment2 == null) { 
       fragment2 = new RealtimeFragment(); 
       fragmentTransaction.add(R.id.fragment_realtime, fragment2, fragment2_tag); 
      } else { 
       fragmentTransaction.attach(fragment2); 
      } 


      fragmentTransaction.commit(); 

     } 

     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 

      android.support.v4.app.FragmentTransaction fragementTransaction = activity.getSupportFragmentManager().beginTransaction(); 

      if(fragment1_tag != null) 
       fragementTransaction.detach(fragment1); 
      if(fragment2 != null) 
       fragementTransaction.detach(fragment2); 


      fragementTransaction.commit(); 

     } 

    } 

클래스 RealtimeFragmentfragment_realtime이 보이는 해당 레이아웃 : 클래스

public class RealtimeFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_realtime, container, false); 
     return view; 
    } 
} 


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

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

</LinearLayout> 

한 탭 이제 두 개의 단편 RealtimeFragment해야 표시됩니다. 단편에는 버튼 하나만 표시되지만 아무 것도 표시되지 않습니다! 왜?

+0

왜 일부 코드 당신이 점점 오류를 게시하지 일반 조각처럼, 그것을 팽창? – Barak

답변

0

나는 같은 주제에 대한 해결책을 찾고 있었고 매우 유용했다.

<?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"> 
    <fragment android:name="com.example.news.ArticleListFragment" 
      android:id="@+id/list" 
      android:layout_weight="1" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" /> 
    <fragment android:name="com.example.news.ArticleReaderFragment" 
      android:id="@+id/viewer" 
      android:layout_weight="2" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" /> 
</LinearLayout> 

그래서 당신의 조각을 참조 그냥

관련 문제