1

我一直在整天與這個問題作鬥爭,我認爲,仍然無法做到。 我正在爲我的一位朋友構建一些應用程序。 我使用ActionBarSherlock,所以我可以使用操作欄和其他一些像瀏覽器一樣的東西。無論如何,我打算進入主要活動:3個標籤,每個顯示一個片段(3個不同的片段),每個片段都必須顯示fragmentPagerView,這樣我纔可以前後滾動片段(也許我我會添加「永遠滾動」在我得到這個權利之後的某個點)帶有頁面瀏覽的片段的選項卡

事情是,我已經得到我的標籤和運行(我從apiDemos複製了一些代碼) 但是我可以' t得到的標籤顯示,我找不到原因(它甚至沒有崩潰)

這是我的MainActivity持有navActionbar(和一些選項)

public class MainActivity extends SherlockFragmentActivity 
{ 
    SherlockFragment yesTabFragment = new YesTabFragment(); 
    SherlockFragment newTabFragment = new NewTabFragment(); 
    SherlockFragment trendingTabFragment = new TrendingTabFragment(); 

    private void createTabs() 
    { 
     // put ActionBar to nav. mode 
     ActionBar actionBar = getSupportActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     ActionBar.Tab yesTab = actionBar 
       .newTab() 
       .setText("yes") 
       .setTabListener(new TabListener<YesTabFragment>(
         this, "yes", YesTabFragment.class)); 
     actionBar.addTab(yesTab); 

     ActionBar.Tab trendingTab = actionBar 
       .newTab() 
       .setText("trending") 
       .setTabListener(new TabListener<TrendingTabFragment>(
         this, "trending", TrendingTabFragment.class)); 
     actionBar.addTab(trendingTab); 

     ActionBar.Tab newTab = actionBar 
       .newTab() 
       .setText("new") 
       .setTabListener(new TabListener<NewTabFragment>(
         this, "new", NewTabFragment.class)); 
     actionBar.addTab(newTab); 
    } 

    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_activity); 
     createTabs(); 
    } 

    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     MenuInflater inflater = getSupportMenuInflater(); 
     inflater.inflate(R.menu.main_activity_menu, menu); 
     return true; 
    } 

    public static class TabListener<T extends SherlockFragment> implements ActionBar.TabListener 
    { 
     private final SherlockFragmentActivity mActivity; 
     private final String mTag; 
     private final Class<T> mClass; 
     private final Bundle mArgs; 
     private SherlockFragment mFragment; 

     public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz) 
     { 
      this(activity, tag, clz, null); 
     } 

     public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz, Bundle args) 
     { 
      mActivity = activity; 
      mTag = tag; 
      mClass = clz; 
      mArgs = args; 

      // Check to see if we already have a fragment for this tab, probably 
      // from a previously saved state. If so, deactivate it, because our 
      // initial state is that a tab isn't shown. 
      mFragment = (SherlockFragment)mActivity.getSupportFragmentManager().findFragmentByTag(mTag); 
      if (mFragment != null && !mFragment.isDetached()) 
      { 
       FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); 
       ft.detach(mFragment); 
       ft.commit(); 
      } 
     } 

     public void onTabSelected(Tab tab, FragmentTransaction ft) 
     { 
      if (mFragment == null) 
      { 
       mFragment = (SherlockFragment)SherlockFragment.instantiate(mActivity, mClass.getName(), mArgs); 
       ft.add(android.R.id.content, mFragment, mTag); 
      } 
      else 
      { 
       ft.attach(mFragment); 
      } 
     } 

     public void onTabUnselected(Tab tab, FragmentTransaction ft) 
     { 
      if (mFragment != null) 
      { 
       ft.detach(mFragment); 
      } 
     } 

     public void onTabReselected(Tab tab, FragmentTransaction ft) 
     { 
      //Toast.makeText(mActivity, "Reselected!", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

正如我已經說過我複製了TabListener實現直接從apiDemos(雖然我寫了一個完全相同)

這是標籤片段之一的執行(他們都是相同)

public class YesTabFragment extends SherlockFragment 
{ 
    View _fragmentView; 
    private Vector<stuff> list; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     _fragmentView = inflater.inflate(R.layout.yes_fragment, container, false); 

     ViewPager pager = (ViewPager)_fragmentView.findViewById(R.id.gag_pager); 
     API api = API.getInstance(); 

     list = api.get("Yes", 1, 10); 
     MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getFragmentManager(), listOfGags); 

     pager.setAdapter(adapter); 

     return _fragmentView; 
    } 
} 

的yesTabFragment類

public class YesTabFragment extends SherlockFragment 
{ 
    View _fragmentView; 
    private Vector<things> list; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     _fragmentView = inflater.inflate(R.layout.yes_fragment, container, false); 

     ViewPager pager = (ViewPager)_fragmentView.findViewById(R.id.thing_pager); 
     API api = API.getInstance(); 

     list = api.get("Yes", 1, 10); 
     MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getFragmentManager(), list); 

     pager.setAdapter(adapter); 

     return _fragmentView; 
    } 
} 

,當然還有XML爲主要的執行情況和是選項卡(再次標籤幾乎相同)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/List" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" 
    android:orientation="vertical" > 

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

</LinearLayout> 

和yesTab

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

    <android.support.v4.view.ViewPager 
     android:id="@+id/thing_pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </android.support.v4.view.ViewPager> 

</LinearLayout> 

我實在找不出爲什麼標籤片段不更換的FrameLayout和告訴我viewpager的原因。

我真的可以使用一些很好的意見在這裏,因爲我確實失去了一些東西大這裏,搞不懂是什麼...

由於頭...

回答

3

您的MainActivity應該包含ViewPager defenition ,例如:

viewPager=(ViewPager)findViewById(R.id.pager); 
FragmentManager fm = getSupportFragmentManager(); 

/** Defining a listener for pageChange */ 
ViewPager.SimpleOnPageChangeListener pageChangeListener = 
    new ViewPager.SimpleOnPageChangeListener() 
    { 
     @Override 
     public void onPageSelected(int position) { 
      super.onPageSelected(position); 
      actionBar.setSelectedNavigationItem(position); 
     } 
    }; 

/** Setting the pageChange listner to the viewPager */ 
viewPager.setOnPageChangeListener(pageChangeListener); 

/** Creating an instance of FragmentPagerAdapter */ 
fragmentPagerAdapter = new PhotoMugFragmentPagerAdapter(fm); 

/** Setting the FragmentPagerAdapter object to the viewPager object */ 
viewPager.setAdapter(fragmentPagerAdapter); 
相關問題