Java数组中的继承:为什么这是一个类型不匹配?

时间:2012-06-23 16:45:17

标签: android arrays inheritance android-fragments

我有一个BaseFragment所谓的LeaderboardFragment,它扩展了Fragment

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

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。

在我瞄准android.app.Fragment的时候,我意外地延长了android.support.v4.app.Fragment

我修复了导入,错误消失了。

答案 1 :(得分:0)

我认为不行。从理论上讲,如果您将片段定义为Fragment[]并使用LeaderboardFragment[]对其进行初始化,那么您应该在该数组中添加其他类型的Fragment LeaderboardFragment

无论如何,我不明白为什么你不能用这个:

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

最后,数组中的对象是扩展Fragment类的类的实例。