Reputation: 55
I have a ViewPager setup with an array of images to swipe between. At the bottom I have a button that allows the user to select the image that fits them best. I would like to make the button invisible on the first image of the array and then have the button go visible once the second image gets swiped to. I have tried many different solutions that I can think of but am currently stumped. I can make the button be invisible through many different routes such as setting it's visibility to invisible in the xml file and also through if...if else statements in the onCreate and have come to the conclusion that I may need some sort of onClickListener. Here is my current code
public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
// Method for "That's Me" button, stores selected motivator choice
public void thatsMeClick(View view) {
Intent intent = new Intent(MainActivity.this, PhysicalCondition.class);
startActivity(intent);
SharedPreferences sharedPreferences = this.getSharedPreferences("com.elevenfifty.vali.challengeaccepted",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("motivator", viewPager.getCurrentItem());
editor.apply();
int myIntValue = sharedPreferences.getInt("motivator", -1);
Log.i("motivator", Integer.toString(myIntValue));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Allows images to fill entire screen including the notification bar area
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
setContentView(R.layout.activity_main);
ImageAdapter adapter = new ImageAdapter(this);
viewPager = (ViewPager) findViewById(R.id.view_pager);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(0);
viewPager.setPageTransformer(true, new ZoomOutPageTransformer());
PageIndicator circleIndicator = (CirclePageIndicator) findViewById(R.id.circle_indicator);
circleIndicator.setViewPager(viewPager);
}
}
I have tried adding this to the onCreate which worked to set the button to invisible but it will not go back to being visible once the user swipes to the second image. I feel like an onClickListener would fix this but I'm not sure how to get it to work properly and I've tried several different things.
Button thatsMe = (Button) findViewById(R.id.thats_me_button);
if (viewPager.getCurrentItem() == 0) {
thatsMe.setVisibility(View.INVISIBLE);
} else if (viewPager.getCurrentItem() > 0) {
thatsMe.setVisibility(View.VISIBLE);
}
I tried doing something like this for the onClickListener but it didn't work, would love some help on how to fix this issue, thanks!
public void onClick (View view) {
final Button thatsMe = (Button) findViewById(R.id.thats_me_button);
thatsMe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (viewPager.getCurrentItem() != 0) {
thatsMe.setVisibility(View.VISIBLE);
}
}
});
}
Here is the ImageAdapter code that sagits asked me to add.
public class ImageAdapter extends PagerAdapter {
Context context;
// Array of images used for Viewpager
private int[] images = new int[]{R.drawable.mot, R.drawable.mogy,
R.drawable.hife, R.drawable.loot, R.drawable.roel,
R.drawable.crish, R.drawable.surk};
ImageAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
return images.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setImageResource(images[position]);
container.addView(imageView, 0);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((ImageView) object);
}
}
Upvotes: 1
Views: 177
Reputation: 3356
Make use of OnPageChangeListener. Just setting in OnCreate will not work as it will be called only once not when the page is scrolled.
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(position>0){
thatsMe.setVisibility(View.VISIBLE);
}
else {
thatsMe.setVisibility(View.INVISIBLE);
}
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
Upvotes: 2