Android 正在尝试在PageViewer末尾启动intent。应用崩溃
因此,当用户浏览每个页面时,我希望在最后启动一个意图;显示主要活动。现在我将页面数设置为4,这样当用户滑动到第4页时,用户将被发送到我的主要活动。但是我的应用程序崩溃了 片段活性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
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页,即使它是空白页。此方法需要在到达新页面时返回一个片段。好吧。因此我假设没有边界外侦听器?