如何在Android中ViewPager后跳转到下一个活动?

6
我在第一个活动中创建了一个名为“Slide Image”的组件,其中包含五个图像。当我滑动到最后一张图像(第五张)时,应该进入下一个活动,例如activity_next.xml。
下面是我的幻灯片代码,即SlideActivity.java。
public class SlideActivity extends Activity {

    public void onCreate(Bundle savedInstanceState){
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
         ImagePagerAdapter adapter = new ImagePagerAdapter();
         viewPager.setAdapter(adapter);  

    }

     private class ImagePagerAdapter extends PagerAdapter {
            private int[] mImages = new int[] {
                R.drawable.one,
                R.drawable.two,
                R.drawable.three,
                R.drawable.four,
                R.drawable.five
            };

    @Override
    public int getCount() {
    return mImages.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
    return view == ((ImageView) object);
        }

     @Override
     public Object instantiateItem(ViewGroup container, int position) {
       Context context = Illustrations.this;
       ImageView imageView = new ImageView(context);
       int padding = context.getResources().getDimensionPixelSize(
              R.dimen.padding_medium);
       imageView.setPadding(padding, padding, padding, padding);
       imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
       imageView.setImageResource(mImages[position]);
       ((ViewPager) container).addView(imageView, 0);
       return imageView;
      }

}
}

我不知道在哪里传递Intent到下一个活动,即activity_next.xml

**** 根据您的建议更新代码 ****

public void onCreate(Bundle savedInstanceState){
         super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);

  final ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
     ImagePagerAdapter adapter = new ImagePagerAdapter();
     viewPager.setAdapter(adapter);  



  viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            // TODO Auto-generated method stub
         if(position==viewPager.getAdapter().getCount()){
    Intent reg = new Intent(SlideActivity.this,activity_next.class);
                startActivity(reg);
            }
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }
    });


    }

        private class ImagePagerAdapter extends PagerAdapter {
        private int[] mImages = new int[] {
            R.drawable.one,
            R.drawable.two,
            R.drawable.three,
            R.drawable.four,
            R.drawable.five
        };

      @Override
      public int getCount() {
      return mImages.length+1;
      }

      @Override
      public boolean isViewFromObject(View view, Object object) {
      return view == ((ImageView) object);
       }

         @Override
     public Object instantiateItem(ViewGroup container, int position) {
     Context context = Illustrations.this;
     ImageView imageView = new ImageView(context);
     int padding = context.getResources().getDimensionPixelSize(
          R.dimen.padding_medium);
     imageView.setPadding(padding, padding, padding, padding);
     imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
     if(position < getCount()-1)
     imageView.setImageResource(mImages[position]);
     ((ViewPager) container).addView(imageView, 0);
     return imageView;
   }




    @Override
    public void destroyItem(ViewGroup container, int position, Object   object) {
      ((ViewPager) container).removeView((ImageView) object);
    }
 }
 }

以下是activity_next.java的代码:

public class activity_next extends Activity{

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_next);
}

}

以下是activity_next.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Welcome to Nowhere Else" />

</LinearLayout>

在 "Intent reg = new Intent(Activity_Next.this,activity_next.class);" 中,Activity_Next.this 是什么? - Chol
抱歉,那是一个错误。我已经更新了代码。请检查一下。 - Kirataka
很奇怪你的活动是空白的...它应该可以工作,尝试更改textView1的文本颜色以确保。 - Chol
我也改变了颜色。它没有跳转到下一个意图,即下一个活动。当我滑动最后一张图片时,会出现空白白屏幕。 - Kirataka
1
哦,它没有启动活动?也许是在这里:position==viewPager.getAdapter().getCount()。position将从0开始,所以你应该写成:position==(viewPager.getAdapter().getCount()-1)。 - Chol
大兄弟,非常感谢您。我已经成功跳转到下一个活动页面了。 :) - Kirataka
4个回答

2

我不知道在哪里传递意图到下一个活动,即activity_next.xml

为了在ViewPager达到最后一个项目时启动Activity,请将OnPageChangeListener添加到ViewPager中,并在onPageSelected中启动下一个Activity:

viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
     @Override
     public void onPageSelected(int position) 
     {     
            if(position==viewPager.getAdapter().getCount()){
                //start next Activity here with activity_next.xml layout
             }
     } 
     ....
});

我刚刚使用了addOnPageChangeListener,但是仍然出现了相同的问题,在我滑动到第五张图片时,它显示为空白活动。 - Kirataka
@Kirataka:您说 onPageSelected 方法获取到空白的 Activity?请分享更新后的代码。 - ρяσѕρєя K
@Kirataka:你说得对,现在出现了空白活动。那么问题是什么?因为在问题中,您没有转到ViewPager的最后一页上的下一个Activity。但现在你能够看到空白的Activity。还有其他数据需要在下一个Activity中显示吗? - ρяσѕρєя K
@iamkaan 我正在通过滑动来移动图像,而不是滚动。 - Kirataka
@ρяσѕρєяK 是的,我已经在AndroidManifast.xml中添加了它。 请在上面找到activity_next.class和activity_next.xml代码。 - Kirataka
显示剩余5条评论

2
如果您想将最后一张图片滑动到下一个活动,就像“解除”效果一样,您可以尝试以下内容:
private class ImagePagerAdapter extends PagerAdapter {
    private int[] mImages = new int[] {
        R.drawable.one,
        R.drawable.two,
        R.drawable.three,
        R.drawable.four,
        R.drawable.five
    };

@Override
public int getCount() {
  return mImages.length+1;
}

@Override
public boolean isViewFromObject(View view, Object object) {
   return view == ((ImageView) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
   Context context = Illustrations.this;
   ImageView imageView = new ImageView(context);
   int padding = context.getResources().getDimensionPixelSize(
      R.dimen.padding_medium);
   imageView.setPadding(padding, padding, padding, padding);
   imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
if(position < getCount()-1)
   imageView.setImageResource(mImages[position]);
   ((ViewPager) container).addView(imageView, 0);
   return imageView;
}

然后:

public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

     ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
     ImagePagerAdapter adapter = new ImagePagerAdapter();
     viewPager.setAdapter(adapter);
     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageSelected(int position) 
        {     
            if(position==viewPager.getAdapter().getCount()-1){
            //start next Activity
            }
        } 
     });  

}

第五张图片后我得到了一个空白的活动页面... :( - Kirataka
如果你在方法“onPageSelected”上开始你的下一个活动,当你在第5页之后滑动时,一个新的活动应该开始,并使用你设置的布局。你能展示一下启动新活动的代码吗? - Sérgio Moura
首先,你的类名应该以大写字母“Activity_next”开头,并且应该采用驼峰命名法 -> ActivityNext。我认为问题可能出在你启动新活动时使用的上下文上。你正在使用Illustrations.this,你应该使用SlideActivity.this。 - Sérgio Moura
它是 Activity_Next.classactivity_next.xml。你真的认为这是问题吗? - Kirataka
明白了兄弟...就像Chol上面说的那样.. 应该是:position==(viewPager.getAdapter().getCount() -1)谢谢你的支持 - Kirataka
显示剩余3条评论

1
这段内容是关于编程的,意思是“position是一个数组,例如slide_image[position],表示图片的位置。因此,只需使用position,SliderAdapter页面就可以轻松创建Intent,只需写入几行代码。”下面的代码是Java中的重写方法,用于在容器中创建新的对象。
    layoutInflater =(LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.layout, container, false);
    LinearLayout layoutslide = view.findViewById(R.id.slider);

    ImageView slideImageView =(ImageView)view.findViewById(R.id.slide_image);
    TextView slideHeading=(TextView)view.findViewById(R.id.slide_heading);
    TextView slideDescription=(TextView)view.findViewById(R.id.slide_desc);

    slideImageView.setImageResource(slide_image[position]);
    slideHeading.setText(slide_headings[position]);
    slideDescription.setText(slide_description[position]);

    slideImageView.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            if (position == 0) {

                Intent myIntent = new Intent(context,EarthQuakeActivity.class);
                context.startActivity(myIntent);
            }
            if (position == 1) {

                Intent myIntent = new Intent(context,EarthQuakeActivity.class);
                context.startActivity(myIntent);
            }

            if (position == 2) {

                Intent myIntent = new Intent(context,EarthQuakeActivity.class);
                context.startActivity(myIntent);
            }


        }
    });

1
我明白了,就像@Chol所说的那样,我只需要将计数器减去1即可,代码如下。
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            if(position==viewPager.getAdapter().getCount()-1){
                Intent reg = new   
 Intent(Illustrations.this,Register_Page.class);
                startActivity(reg);
            }

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }


     });

  }

非常感谢大家... :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接