2011-12-01 92 views
1

我在想这是否可以完成。基本上我有一个布局,其中有2个片段,我用于大多数标签,但在2个标签中,我想添加更多片段以显示更多内容。更改标签时是否可以将内容视图更改为不同的布局?根据操作栏选项卡更改活动内容视图

如果不能完成,我想创建一个布局,其中包含我需要的所有片段部分,只是更改片段的布局,以便我不使用的那些不会“显示”。我不是故意使用FragmentTransaction.hide(),因为我希望片段在其他人不使用时填满屏幕。这是一个坏主意,还是有更简单的方法去做我想要的?

,这里是我的活动代码和标签

public class Tabs extends Activity{ 
long deleteID; 

@Override 
public void onCreate(Bundle create){ 
    super.onCreate(create); 

    setContentView(R.layout.main_layout); 

    createTabs(); 
    ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); 
    bar.setDisplayHomeAsUpEnabled(true); 

    if(create != null){ 
     bar.setSelectedNavigationItem(create.getInt("Home",0)); 
    } 

} 

我还添加选项卡的诸如此类但那并不重要

这是动作条的子类

private class TabListener implements ActionBar.TabListener{ 
    TabContent mFragment; 

    public TabListener(TabContent fragment) { 
     mFragment = fragment; 
    } 

    @Override 
    public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) { 

    } 

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

      ListFragment newListFragment = new BowlersListFragment(); 
      Fragment newFragment = new BowlerEntryFrag(); 
      ft = getFragmentManager().beginTransaction(); 
      ft.replace(R.id.frameOne, newListFragment); 
      ft.replace(R.id.frameTwo, newFragment); 

     ft.addToBackStack(null); 
     ft.commit(); 
    } 

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

     if(ft != null){ 
      ft.remove(mFragment); 
     } 
    } 

} 

} 

我试图做Activity.setContentView(r.layout.newView)但不会工作

回答

1

我有类似的问题,所以IMP像这样说。我有一个mainActivity来保存并创建标签。这项活动使用的布局,一个片段容器,main.xml中:

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

<LinearLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

</RelativeLayout> 

在我的活动我创建的标签和碎片下面的代码:

historyTab = actionbar.newTab().setText("History"); 
historyTab.setTabListener(new MyTabsListener(new HistoryFragment())); 
actionbar.addTab(historyTab); 

我tabListener看起来是这样的:

private class MyTabsListener implements ActionBar.TabListener { 
    public Fragment fragment; 
    private boolean isFragmentAdded = false; 

    public MyTabsListener(Fragment fragment) { 
     this.fragment = fragment; 
    } 
      @Override 
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) { 

     FragmentManager fragMgr = getSupportFragmentManager(); 
     FragmentTransaction xaction = fragMgr.beginTransaction(); 

     if (fragment instanceof HistoryFragment) { 
      fragment = new HistoryFragment(); 
      xaction.add(R.id.fragment_container, fragment); 
     } else if (fragment instanceof .. some other fragment..) { 
      fragment = new .. some other fragment(); 
      xaction.add(R.id.fragment_container, fragment); 
     } 
     } 

     xaction.commit(); 
    } 

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

     FragmentManager fragMgr = getSupportFragmentManager(); 
     FragmentTransaction xaction; 

     xaction = fragMgr.beginTransaction(); 
     Fragment fragment = fragMgr.findFragmentById(R.id.fragment_container); 
     xaction.remove(fragment); 

     xaction.commit(); 
    } 

} 

在我的例子历史片段布局,可以是任何东西,甚至可以包含两个片段,或尽可能多的,你需要的布局。只是要小心,并在片段onCreateview方法,用这个!

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle   
savedInstanceState) { 
    if (view == null) { // this line is very important! 
     view = inflater.inflate(R.layout.history_fragment_layout, container, false); 
     listView = (ListView) view.findViewById(R.id.historyList); 
    } 

    return view; 
} 

希望帮助:)