Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在尝试在PageViewer末尾启动intent。应用崩溃_Android_Android Fragments - Fatal编程技术网

Android 正在尝试在PageViewer末尾启动intent。应用崩溃

Android 正在尝试在PageViewer末尾启动intent。应用崩溃,android,android-fragments,Android,Android Fragments,因此,当用户浏览每个页面时,我希望在最后启动一个意图;显示主要活动。现在我将页面数设置为4,这样当用户滑动到第4页时,用户将被发送到我的主要活动。但是我的应用程序崩溃了 片段活性 public class ScreenSlideActivity extends FragmentActivity { private static final int NUM_PAGES = 4; ViewPager mPager; private PagerAdapter mPagerAdapter; @Ov

因此,当用户浏览每个页面时,我希望在最后启动一个意图;显示主要活动。现在我将页面数设置为4,这样当用户滑动到第4页时,用户将被发送到我的主要活动。但是我的应用程序崩溃了

片段活性

public class ScreenSlideActivity extends FragmentActivity {

private static final int NUM_PAGES = 4;

ViewPager mPager;
private PagerAdapter mPagerAdapter;

@Override
public void onBackPressed() {

    int pos = mPager.getCurrentItem();

    if (pos == 0) {
        super.onBackPressed();
    } else mPager.setCurrentItem(pos - 1);
}

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

    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new adapter(getSupportFragmentManager());
    mPager.setAdapter(mPagerAdapter);


}


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

    @Override
    public Fragment getItem(int position) {

        if (position == 4) {

            Intent intent = new Intent(getApplication(), MainActivity.class);
            startActivity(intent);
        }

        return ScreenSlidePageFragment.initialize(position);
    }

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

public class ScreenSlidePageFragment extends Fragment {

int position;

String[] text = {"Be more productive", "Choose your own work and rest times", "Login to access full features"};
int[] images = {R.drawable.productivity, R.drawable.workingguy, R.drawable.logincmon};



public static ScreenSlidePageFragment initialize(int position) {
    ScreenSlidePageFragment page = new ScreenSlidePageFragment();
    Bundle args = new Bundle();
    args.putInt("POSITION", position);
    page.setArguments(args);
    return page;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    position = getArguments().getInt("POSITION", 0);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_screen_slide_page, container, false);
    TextView tv = (TextView) v.findViewById(R.id.MainText);
    ImageView image = (ImageView) v.findViewById(R.id.MainImage);

    tv.setText(text[position]);
    image.setImageResource(images[position]);

    return v;

}
}

将验证更改为启动
意图
为3,而不是4。 请记住,列表开始计算0中的索引

@Override
public Fragment getItem(int position) {

    if (position == 3) { // position 3 is the page #4

        Intent intent = new Intent(getApplication(), MainActivity.class);
        startActivity(intent);
        finish();
    }

    return ScreenSlidePageFragment.initialize(position);
}
您收到的错误是您正在调用
ScreenSlidePageFragment.initialize(3)
。在
screensilepagefragment
中,
String[]text
int[]images
包含3个元素(来自索引0..2)


这将导致运行时出现
ArrayIndexOutOfBoundsException
并使应用程序崩溃。

此崩溃的堆栈跟踪是什么?
if(position==4){
这需要是3,从0开始..3给你4页我认为解决这个问题的方法是调用某种边界外的侦听器。但是我找不到一个这样做不起作用的。因为位置3是越界的,我将永远无法滑动到该位置。是否有某种方式,当我滑动越界时,意图将被启动?为什么超出范围?你没有4页吗?我只有3页。当我刷到第4页时(不存在),我希望启动意图。这就是为什么最初我将页面计数设置为4,这样当我滑动到不存在的第4页时,意图将运行良好,您需要第4页,即使它是空白页。此方法需要在到达新页面时返回一个片段。好吧。因此我假设没有边界外侦听器?