0

I have a BaseFragment so called LeaderboardFragment that extends Fragment:

public class LeaderboardFragment extends Fragment

And when I define the next in the FragmentActivity, I get type mismatch:

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

And these fragments all extend LeaderboardFragment. Something like this should be possible right, because they simply inherit that super class.

EDIT This is how my FragmentActivity looks like:

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");
    }
}

}

And the exact error is:

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

2 に答える 2

1

I have solved the problem.

I have accidentally extended android.app.Fragment while I was aiming for android.support.v4.app.Fragment.

I fixed the imports and the errors were gone.

于 2012-06-23T17:18:17.987 に答える
0

I don't think that works. Theoretically, if you define fragments as Fragment[] and initialize it with LeaderboardFragment[], what should happen you add other types of Fragment which are not LeaderboardFragment to that array?

Anyway, I don't see why you can't use this:

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

In the end, the objects in the array are instances of classes that extend Fragment class.

于 2012-06-23T16:50:06.490 に答える