0

I have an app with vertical slider to switch between different smileys (from happier to saddest) My problem is i don't know how I can get currentItem of my ViewPager (When User is on a specific smiley)

I've tried

verticalViewPager.setOnTouchListener(new View.OnTouchListener() {
         @Override
         public boolean onTouch(View v, MotionEvent event) {
                mPreferences.edit().putInt(PREF_KEY_CURRENT_SMILEY,verticalViewPager.getCurrentItem()).apply();
                return false;
         }
});

And in the other activity (where i have to store the current smiley selected) :

currentSmileyInt = mPreferences.getInt(PREF_KEY_CURRENT_SMILEY,-50);

    currentSmileyString = Integer.toString(currentSmileyInt);
    currentSmileyTextView.setText(currentSmileyString);

If i'm good the textview on the other activity should display an int between 1-6. (different positions), and if i'm not good it display -50.

I don't understand what i'm doing wrong, as i set verticalVP.setCurrentItem(3) the corresponding smiley is displayed ... Thank you in advance and sorry for my bad english :)

Marco Daniel
  • 5,467
  • 5
  • 28
  • 36
M.garcia
  • 41
  • 1
  • 8

3 Answers3

1
**You can use ViewPager.OnPageChangeListener** 
  SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
  final SharedPreferences.Editor editor = pref.edit();


           viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                }    
                @Override
                public void onPageSelected(int position) {
                    currentPage=position;
                    Toast.makeText(MainAsyncActivity.this, "position: "+position, Toast.LENGTH_SHORT).show();
                    editor.putInt("key_name",currentPage); // Storing integer
                    editor.commit(); // commit changes

                }

                @Override
                public void onPageScrollStateChanged(int state) {
                }
            });    

**get stored value from SharedPreferences**

   int currentSmileyInt=  pref.getInt("key_name", 0);
   Log.d("Keyname: ", String.valueOf(currentSmileyInt));
   String currentSmileyString = Integer.toString(currentSmileyInt);
   currentSmileyTextView.setText(currentSmileyString);
  • That almost worked, as my ViewPager is a VerticalViewPager, i don't have access to .addOnPageChangeListener... I have onScrollChangeListener, onAttacheStateChangeListener, can I use one of those ? thanks – M.garcia Mar 01 '19 at 09:47
  • I've setOnPageChangeListener ! – M.garcia Mar 01 '19 at 09:53
0

why don't you just use getcurrentItem method from viewpager. like following, will give you the pageNumber of the view pager.

 //  getting current Page
 int page = mPager.getCurrentItem();
Jay Dangar
  • 3,271
  • 1
  • 16
  • 35
0

This method getCurrentItem will work for you to get a position of ViewPager fragment and you can use like this following:

((YourActivity)getActivity()).verticalViewPager.getCurrentItem()); 

YourActivityis where you are exactly using the ViewPager with adapter and getActivity() is the Context as a reference of your fragment and do not forget to make verticalViewPager object as public access specifier.

ॐ Rakesh Kumar
  • 1,318
  • 1
  • 14
  • 24