1

谁能告诉我为什么这不起作用?自从上次工作以来,我没有更改此文件,但现在我收到以下错误:

import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

public class MainActivity extends FragmentActivity {

private final static int NUM_PAGES = 2;
private ViewPager mPager;
private ScreenSlidePagerAdapter mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);

// Instantiate a ViewPager and a PagerAdapter.
mPager = (ViewPager) findViewById(R.id.pager);
mAdapter = new ScreenSlidePagerAdapter(getFragmentManager());
mPager.setAdapter(mAdapter);
mPager.setCurrentItem(2);
}

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int i) {

    Fragment frag = null;

    switch (i) {
    case 0:
        frag = new PageOneFragment();
        break;
    case 1:
        frag = new PageTwoFragment();
        break;

    }
    return frag;
}

@Override
public int getCount() {
    return NUM_PAGES;
}
}
}

错误出现在“frag = new PageTwoFragment();”上 其中指出“类型不匹配:无法从 PageTwoFragment 转换为 Fragment”。

也许我应该从现在开始创建两个项目,最后一个好版本,然后是当前工作项目。这是别人做的吗?

谢谢

4

2 回答 2

3

问题是,您正在混合使用 API11 中引入的 Android 片段和来自 android 支持库的片段。

您必须使用其中之一,但不能同时使用两者。

将您的导入更改为

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

并更改getFragmentManager()getSupportFragmentManager().

它将使用支持库工作。

mPager.setCurrentItem(2);但是,使用 2 个 Fragments 的寻呼机调用会崩溃。只有01在您的情况下是有效值。

于 2013-09-07T12:47:19.463 回答
1

您导入了错误的片段。

您需要导入 android.support.v4.Fragment

此外,您的适配器仅处理 2 个片段。因此调用

ViewPager.setCurrentItem(2);

会导致问题,因为第一个片段的索引是 0。

于 2013-09-07T12:47:21.240 回答