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; 
} 

希望幫助:)

相關問題