Reputation: 619
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
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
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