2012-06-23 31 views
0

我有一個BaseFragment所謂LeaderboardFragment延伸FragmentJava數組中的繼承:爲什麼這是一個類型不匹配?

public class LeaderboardFragment extends Fragment 

當我確定在FragmentActivity下一個,我得到類型不匹配:

Fragment[] fragments = new LeaderboardFragment[] {new Fragment1(), 
    new Fragment2(), new Fragment3()}; 

而且這些片段都可以擴展LeaderboardFragment。像這樣的東西應該是可能的,因爲它們只是繼承那個超級類。

編輯 這是我FragmentActivity看起來像:

public class LeaderboardTabHost extends FragmentActivity { 

ViewPager myViewPager; 
Fragment[] fragments = new Fragment[] {new Fragment1(), new Fragment2(), new Fragment3()}; 

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

    MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager()); 
    myViewPager = (ViewPager) findViewById(R.id.pager); 
    myViewPager.setAdapter(adapter); 
    myViewPager.setCurrentItem(1); 
} 

private class MyPagerAdapter extends FragmentPagerAdapter { 

    public MyPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int index) { 
     return fragments[index]; 
    } 

    public int getCount() { 
     return 3; 
    } 

    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) { 
     ((ViewPager) arg0).removeView((View) arg2); 
    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     // TODO Auto-generated method stub 
     return arg0 == ((View) arg1); 
    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 
} 

public class Fragment1 extends LeaderboardFragment { 

    public Fragment1() { 
     super(); 
     setTag("time"); 
    } 
} 

public class Fragment2 extends LeaderboardFragment { 

    public Fragment2() { 
     super(); 
     setTag("distance"); 
    } 
} 

public class Fragment3 extends LeaderboardFragment { 

    public Fragment3() { 
     super(); 
     setTag("speed"); 
    } 
} 

}

以及確切的錯誤是:

//Type mismatch: Cannot convert from LeaderboardTabhost.Fragment1 to Fragment 
+0

顯示'FragmentX' * *和*顯示* exact *錯誤消息(多行縮進和全部)的定義。 – 2012-06-23 16:59:24

回答

1

我已經解決了這個問題。

我意外地延長了android.app.Fragment而我的目標是android.support.v4.app.Fragment

我修正了導入,錯誤消失了。

0

我不認爲作品。理論上,如果您將片段定義爲Fragment[]並使用LeaderboardFragment[]對其進行初始化,您應該將其他類型的Fragment添加到該陣列中,而不是LeaderboardFragment

反正,我不明白爲什麼你不能使用此:

Fragment[] fragments = new Fragment[] {new Fragment1(), 
new Fragment2(), new Fragment3()}; 

最後,數組中的對象是擴展Fragment類的類的實例。

+0

像這樣定義數組也會導致類型不匹配。 – tolgap

+0

「Fragment1」,「Fragment2」,「Fragment3」類擴展了「Fragment」,對吧? –

+0

不,如上所述,它們擴展名爲「LeaderboardFragment」的「基類」,它擴展了「片段」。 – tolgap

相關問題