Android Java数组中的继承:为什么这是一种类型不匹配?
我有一个Android Java数组中的继承:为什么这是一种类型不匹配?,android,arrays,inheritance,android-fragments,Android,Arrays,Inheritance,Android Fragments,我有一个BaseFragment所谓的排行榜Fragment,它扩展了Fragment: public class LeaderboardFragment extends Fragment 当我在FragmentActivity中定义下一个时,我得到类型不匹配: Fragment[] fragments = new LeaderboardFragment[] {new Fragment1(), new Fragment2(), new Fragment3()}; 这些片段都扩展了排行
BaseFragment
所谓的排行榜Fragment,它扩展了Fragment
:
public class LeaderboardFragment extends Fragment
当我在FragmentActivity
中定义下一个时,我得到类型不匹配:
Fragment[] fragments = new LeaderboardFragment[] {new Fragment1(),
new Fragment2(), new Fragment3()};
这些片段都扩展了排行榜片段。这样的事情应该是可能的,因为它们只是继承了那个超类
编辑
这就是我的碎片活动的样子:
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
我认为那不管用。理论上,如果将片段定义为
Fragment[]
并使用leadboardfragment[]
对其进行初始化,那么将不属于leadboardfragment
的片段的其他类型添加到该数组中会发生什么
无论如何,我不明白你为什么不能用这个:
Fragment[] fragments = new Fragment[] {new Fragment1(),
new Fragment2(), new Fragment3()};
最后,数组中的对象是扩展Fragment
类的类的实例。我已经解决了这个问题
当我瞄准android.support.v4.app.Fragment
时,我意外地扩展了android.app.Fragment
我修复了导入,错误消失了。这样定义数组也会导致类型不匹配。类Fragment1
,Fragment2
,Fragment3
extendFragment
,对吗?不,如上所述,它们扩展了一个名为leadboardfragment
的“基类”,扩展了Fragment
。这意味着它们也扩展了Fragment
。他们是侄子
,不是子女
,而是继承片段
。无论如何,这很奇怪。我不知道它为什么会抛出该异常。显示FragmentX
的定义并显示确切的错误消息(多行缩进和所有)。