2012-03-05 76 views
18

我試圖使用片段,ViewPager & co。來自Android支持庫v4。當我聽到來自尋呼機的頁面更改事件但內容不可見時,碎片似乎會滾動。我基本上已經是:ViewPager with FragmentPagerAdapter does not show content

一個FragmentActivity:

public class MyActivity extends FragmentActivity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     FragmentPagerAdapter fpa = new MyPagerAdapter(this, createFragments()); 

     ViewPager vp = (ViewPager) findViewById(R.id.pager); 
     vp.setAdapter(fpa); 
    } 

    private List<Fragment> createFragments() { 
     List<Fragment> list = new ArrayList<Fragment>(); 
     list.add(Fragment.instantiate(this, First.class.getName())); 
     list.add(Fragment.instantiate(this, Second.class.getName())); 
     list.add(Fragment.instantiate(this, Third.class.getName())); 

     return list; 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 

    } 

一個FragmentPagerAdapter:

public class MyPagerAdapter extends FragmentPagerAdapter { 
    private List<Fragment> fragments; 

    public MyPagerAdapter(FragmentActivity activity, List<Fragment> fragments) { 
     super(activity.getSupportFragmentManager()); 
     this.fragments = fragments; 
    } 

    @Override 
    public Fragment getItem(int i) { 
     return fragments.get(i); 
    } 

    @Override 
    public int getCount() { 
     return fragments.size(); 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object o) { 
     return view.equals(o); 
    } 

} 

而且三個片段看起來像這樣:

public class First extends Fragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

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

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
    } 
} 

而且他們的佈局像這些:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 
    <TextView android:layout_height="fill_parent" 
       android:layout_width="fill_parent" 
       android:text="First Fragment" 
       android:id="@+id/firstText"/> 
</LinearLayout> 

我原來忘了加上主要佈局,就到這裏吧:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <android.support.v4.view.ViewPager 
      android:id="@+id/pager" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:layout_width="fill_parent"/> 
</LinearLayout> 

我將不勝感激,如果有人能告訴我什麼,我做錯了。

+0

你可以提供包含viewpager佈局?你有沒有在getItem()中放置一個斷點來確保它的觸發?另外,在textviews上設置textcolor爲白色,以確保! – 2012-03-05 14:14:35

+0

噢,現在補充說。 – rgngl 2012-03-06 07:32:07

+0

您的viewpager將其高度設置爲包裝內容,並且頁面的高度設置爲填充父項 - 這沒有意義,可能意味着您的頁面不佔用空間。我懷疑你也希望viewpager擁有fill_parent的高度。 – 2012-03-07 10:17:55

回答

38

這是因爲您已在MyPagerAdapter中覆蓋isViewFromObject

FragmentPagerAdapter句柄isViewFromObject,所以你不應該重寫它。

與我一樣,我認爲這篇文章的大部分訪問者都是從基本的PagerAdapter開始的,然後意識到他們需要頁面片段並改變他們的基類而不知道後果。不幸的是,我無法批評Android團隊。

+1

我從簡單的PagerAdapter更改爲FragmentPagerAdapter並沒有意識到這個問題。非常感謝。 – zgc7009 2015-02-28 19:32:36

+0

你節省了一天! – 2015-04-07 20:46:34

+0

拯救生命,我沒有在其他地方找到這個信息......! – 2015-10-28 05:16:26

1

雅正確的伊恩·紐森說,只是從你的代碼中刪除isViewFromObject overrided方法

@Override 
    public boolean isViewFromObject(View view, Object object) { 
    return false; 
    } 
相關問題