1

I created an application with viewPager and fragment. I want that if the application has 3 fragments pass from 3 to 1 and 1 to 3. I have been reading many posts but I have not managed to do in my application. As I could do? I put my code. Thank you.

MyFragment.java

public class MyFragment extends Fragment {

public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";

public static final MyFragment newInstance(String message)
{
    MyFragment f = new MyFragment();
    Bundle bdl = new Bundle(1);
    bdl.putString(EXTRA_MESSAGE, message);
    f.setArguments(bdl);

    return f;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 

    Bundle savedInstanceState) {

    String message = getArguments().getString(EXTRA_MESSAGE);
    View v = inflater.inflate(R.layout.myfragment_layout, container, false);
    TextView messageTextView = (TextView)v.findViewById(R.id.textView1);
    messageTextView.setText(message); 

    cargar(v);

    return v;
}

public void cargar(View v) {


    final TabHost tabs;

    tabs=(TabHost)v.findViewById(android.R.id.tabhost);

    tabs.setup(); 

    RelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams
            (ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    rllp.addRule(RelativeLayout.CENTER_IN_PARENT);

    TabHost.TabSpec spec = tabs.newTabSpec("mitab1");
    spec.setContent(R.id.tab1);
    spec.setIndicator("TAB 1");
    tabs.addTab(spec);

    spec = tabs.newTabSpec("mitab2");
    spec.setContent(R.id.tab2);
    spec.setIndicator("TAB 2");
    tabs.addTab(spec);

    tabs.setCurrentTab(0);

    tabs.getTabWidget().getChildAt(0).findViewById(android.R.id.title).setLayoutParams(rllp);
    tabs.getTabWidget().getChildAt(1).findViewById(android.R.id.title).setLayoutParams(rllp);

    TabWidget tw = (TabWidget)tabs.findViewById(android.R.id.tabs);
    View tabView = tw.getChildTabViewAt(0);
    final TextView tv = (TextView)tabView.findViewById(android.R.id.title);
    tv.setTextSize(16);
    tv.setTypeface(null, Typeface.BOLD);

    View tabView2 = tw.getChildTabViewAt(1);
    final TextView tv2 = (TextView)tabView2.findViewById(android.R.id.title);
    tv2.setTextSize(16);
    tv2.setTypeface(null, Typeface.BOLD);

    tabs.setOnTabChangedListener(new OnTabChangeListener() {
        @Override
        public void onTabChanged(String tabId) {

            if(tabId.equals("mitab1")) {


            } else {


            }
        }
    });


}

 }

pageViewActivity.java

public class PageViewActivity extends FragmentActivity {

MyPageAdapter pageAdapter;

ViewPager pager;

private int previousState, currentState;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_page_view);

    List<Fragment> fragments = getFragments();

    pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);

    pager = (ViewPager)findViewById(R.id.viewpager);
    pager.setAdapter(pageAdapter);
}

public void onPageScrollStateChanged(int state) {              

    int currentPage = pager.getCurrentItem();       //ViewPager Type

    if (currentPage == 3 || currentPage == 0){
        previousState = currentState;
        currentState = state;
        if (previousState == 1 && currentState == 0){

            pager.setCurrentItem(currentPage == 0 ? 3 : 0);

        }
    }
}

private List<Fragment> getFragments(){
    List<Fragment> fList = new ArrayList<Fragment>();

    for(int i=0;i<3;i++) {
        fList.add(MyFragment.newInstance("Monumento " + (i+1)));
    }
    return fList;
}

private class MyPageAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments;

    public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }
    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    @Override
    public int getCount() {
        return this.fragments.size();
    }
}
}
user3231711
  • 89
  • 3
  • 9

2 Answers2

2

for this you need to take 2 dummy fragments and in onpagechangelistner you need to detect if page count is 4 then just called setcurrentpage to 1 same way for 1 to 3 look this code

public class MyPageChangeListener implements OnPageChangeListener {
        @SuppressWarnings("static-access")
        @Override
        public void onPageScrollStateChanged(int state) {

        }

        @Override
        public void onPageScrolled(int position, float positionOffset,
                int positionOffsetPixel) {
        }

        @Override
        public void onPageSelected(int arg0) {

        if (viewPager.getCurrentItem() == 4) {
            viewPager.setCurrentItem(1, false);   
        } 
            if (viewPager.getCurrentItem() == 0) {
            viewPager.setCurrentItem(3, false); // false will prevent sliding                      animation of view pager
        }
        }
    } 
Maulik.J
  • 636
  • 1
  • 6
  • 14
1

You can set your current page by using pager.setCurrentItem(num) function. I think this can also useful in your case.pager.getCurrentItem() function is used for getting the current page.

Alex Chengalan
  • 8,211
  • 4
  • 42
  • 56