简体   繁体   中英

Handling the touch event on pagertabstrip

Am developing a application with viewpager and pagertabstrip in my layout.My problem here is when i am swipping left or right on the pagertabstrip it is displaying left or right pages which i don't want.What exactly i want is,on swipping on pagertabstrip only the titles in the pagertabstrip should move left or right.On selecting the title it should display the particular page.Hope am clear with my question. Here is my code

public class ViewPagerAdapter extends FragmentPagerAdapter {

    // Declare the number of ViewPager pages
    final int PAGE_COUNT = 10;
    private String titles[] = new String[] { "English", "Hindi","Assamese","Marathi","Telugu","Gujarati","Bengali","Kannada","Malayalam","Tamil"};

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {

            // Open FragmentTab1.java
        case 0:
            //View view=LayoutInflater.from(ViewPagerAdapter.this)
            FragmentTab1 fragmenttab1 = new FragmentTab1();
            return fragmenttab1;
            //View view=LayoutInflater.from(R.layout.web);

            // Open FragmentTab2.java
        case 1:
            FragmentTab2 fragmenttab2 = new FragmentTab2();
            return fragmenttab2;

        case 2:

            FragmentTab3 fragmenttab3=new FragmentTab3();
            return fragmenttab3;
        case 3:
            FragmentTab4 fragmenttab4=new FragmentTab4();
            return fragmenttab4;

        case 4:
            FragmentTab5 fragmenttab5=new FragmentTab5();
            return fragmenttab5;
        case 5:

            FragmentTab6 fragmenttab6=new FragmentTab6();
            return fragmenttab6;
        case 6:
            FragmentTab7 fragmenttab7=new FragmentTab7();
            return fragmenttab7;
        case 7:
            FragmentTab8 fragmenttab8=new FragmentTab8();
            return fragmenttab8;

        case 8:
            FragmentTab9 fragmenttab9=new FragmentTab9();
            return fragmenttab9;
        case 9:
            FragmentTab10 fragment10=new FragmentTab10();
            return fragment10;
        }
        return null;
    }

    public CharSequence getPageTitle(int position) {
        return titles[position];
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }
}

public class WebFragment extends SherlockFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view=inflater.inflate(R.layout.web,container,false);
        ViewPager mviewpager=(ViewPager) view.findViewById(R.id.viewPager);
        PagerTabStrip tabstrip=(PagerTabStrip) view.findViewById(R.id.pagerTabStrip);
        mviewpager.setAdapter(new ViewPagerAdapter(getChildFragmentManager()));
        final int pageMargin=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources().getDisplayMetrics());
        mviewpager.setPageMargin(pageMargin);
        tabstrip.setGravity(Gravity.LEFT);
        return view;
    }

    @Override
    public void onDetach() {
        super.onDetach();
        try {
            Field childFragmentManager = Fragment.class
                .getDeclaredField("mChildFragmentManager");
            childFragmentManager.setAccessible(true);
            childFragmentManager.set(this, null);
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }
}

The simplest way is to setOnTouchListener and return true for ViewPager.

mviewpager.setOnTouchListener(new OnTouchListener()
{           
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        return true;
    }
});

another solution is you need to subclass your viewpager

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class CustomViewPager extends ViewPager {

public CustomViewPager (Context context) {
    super(context);
}

public CustomViewPager (Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages
    return false;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages
    return false;
}

}

and in your xml

<youpackage.CustomViewPager 
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM