Safwan Bardolia
Safwan Bardolia

Reputation: 619

how can I jump to another activity after clicking on on particular page in ViewPager?

I have problem in going to next activity in ViewPager when i jump to other activity I created a "Slide Image" in first activity; which has five images. After I slide the last image(fifth), it should go to next activity,say-activity_next.xml.

My RoomSelect class :

          mslidViewPager = (ViewPager) findViewById(R.id.slideViewPager);

           sliderAdapter=new SliderAdapter(this);

           mslidViewPager.setAdapter(sliderAdapter);

My slideractivity class

  public String[] slide_headings = {
        "DELUX",
        "SEMI DELUX",
        "Dormitory"
  };

  public String[] s1= {
        "Apply for Delux",
        "Apply for Semi-Delux",
        "Apply for Dormitory"

  };


  public Object instantiateItem(@NonNull ViewGroup container, final int position) { 

     layoutInflater =(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
     View view=layoutInflater.inflate(R.layout.slide_layout,container,false);



     imageView.setImageResource(slide_images[position]);
     slideHeading.setText(slide_headings[position]);
     slideDes.setText(slide_descrpition [position]);
     but.setText(s1 [position]);





     view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                if(position==0) {
                    Toast.makeText(context, "delux", Toast.LENGTH_SHORT).show();

                }
                else if (position==1) {
                    Toast.makeText(context, "semi-delux", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(context, "Dormitory", Toast.LENGTH_SHORT).show();

                }
        }
    });

    container.addView(view);

    return view;
}

Upvotes: 0

Views: 66

Answers (2)

Kiran Bablani
Kiran Bablani

Reputation: 121

In Adapter do:

override fun instantiateItem(container: ViewGroup, position: Int): Any {
    val inflater = LayoutInflater.from(context)
    val itemView = context.layoutInflater.inflate(R.layout.row, container, false) as ViewGroup
    val heading = itemView.findViewById(R.id.textView) as TextView
    if (position < list.size)
        heading.setText(list[position])
    container.addView(itemView)

    return itemView

}

override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
    container.removeView(`object` as LinearLayout)
}

override fun isViewFromObject(view: View, `object`: Any): Boolean {
    return view === `object`
}

override fun getCount(): Int {
    return list.size+1
}

Inside activity:

 viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
        override fun onPageScrollStateChanged(state: Int) {

        }

        override fun onPageScrolled(
            position: Int,
            positionOffset: Float,
            positionOffsetPixels: Int
        ) {

        }

        override fun onPageSelected(position: Int) {
            if (position == list.size) {
                startActivity(Intent(this@MainActivity, SecondActivity::class.java))
            }

        }

    })

Upvotes: 1

justArandomUser
justArandomUser

Reputation: 116

the best way is to make a "fake slide" or a "dummy slide" as your last slide (with no content) so when you swipe on your "fake slide" it will jump to another activity

first make your "fake slide" by adding this to the class that extends the PagerAdapter:

 @Override
public int getCount() {
    return s1.length+1;//in your example it turns to be 4
}

and put all setting views in a condition :

 @Override
public Object instantiateItem(@NonNull final ViewGroup container, final int position) {
    layoutInflater =(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    View view=layoutInflater.inflate(R.layout.slide_layout,container,false);
    imageView.setImageResource(slide_images[position]);
    if(position<=s1.length-1) {
        slideHeading.setText(slide_headings[position]);
        slideDes.setText(slide_descrpition [position]);
        but.setText(s1 [position]);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(position==0) {
                    Toast.makeText(context, "delux", Toast.LENGTH_SHORT).show();

                }
                else if (position==1) {
                    Toast.makeText(context, "semi-delux", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(context, "Dormitory", Toast.LENGTH_SHORT).show();

                }
              }
            });


   }
   container.addView(view);
   return view;

}

and at last add this listener in your RoomSelect class :

mslidViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {
        }

        @Override
        public void onPageSelected(int i) {
            sum=0;
            if(i==3)//same as the the amount of your slides {
                mslidViewPager.setCurrentItem(2);//so when you turn back to MyRoomSelect activity you face your last slide
                startActivity(new Intent(MyRoomSelectActivity.this, NextActivity.class));
            }
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });

P.s. consider using arrayList instead of string[] and passing the arrayList as to your adapters constructor. hope this helps :)

Upvotes: 0

Related Questions