3

怎样才能锁定寻呼viewpager的片段活性片段swipe.I'm在一个fragment.While执行进度使用一些操作进展进度片段得到action.so而progessing进度,因为刷卡的变化我想停止滑动。如何做到这一点?有没有解决方案?锁定页面片段ViewPager安卓

activity.xml文件 -

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainFragmentActivity" > 

    <android.support.v4.view.PagerTitleStrip 
     android:id="@+id/pager_title_strip" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" 
     android:background="@drawable/title" 
     android:paddingBottom="4dp" 
     android:paddingTop="4dp" 
     android:textColor="#fff" /> 

</android.support.v4.view.ViewPager> 

片段活动 -

public class MainFragmentActivity extends FragmentActivity { 

    private SectionsPagerAdapter mSectionsPagerAdapter; 
    private ViewPager mViewPager; 
    private Context mContext; 
    private PagerTitleStrip pt; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity); 

     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(),mContext); 
     mContext=this; 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 
     pt=(PagerTitleStrip) findViewById(R.id.pager_title_strip); 


    } 

SectionsPagerAdapter-

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    Context mContext; 
    Fragment fragment; 

    public SectionsPagerAdapter(FragmentManager fm, Context context) { 
     super(fm); 
     mContext=context; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a DummySectionFragment (defined as a static inner class 
     // below) with the page number as its lone argument. 
     if(position==0){ 
      fragment = new SelectItem(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, position + 1); 
      fragment.setArguments(args); 
     } 
     if(position==1){ 
      fragment = new culation(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, position + 1); 
      fragment.setArguments(args); 
     } 
     if(position==2){ 
         fragment = new GraphDisplay(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, position + 1); 
      fragment.setArguments(args); 
     } 
     return fragment; 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
     case 0 : 
      return "Select item"; 
     case 1: 
      return "Calculation"; 
     case 2: 
      return "Graph"; 
     } 
     return null; 
    } 
} 

回答

2

尝试设置点击为false:

mViewPager.setClickable(false); 

如果这样的作品,你可以做的是创建活动的函数,在视图寻呼机禁用刷卡事件并调用片段功能的进度条显示和功能,使之事件。

子类ViewPager并重写例如onTouch事件:

编辑

public class NonSwipeableViewPager extends ViewPager { 
    private boolean lock; 
    public void lock(){ 
     lock=true; 
    }  
    public void unlock(){ 
     lock=false; 
    } 
    public NonSwipeableViewPager(Context context) { 
     super(context); 
    } 

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

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if(lock) 
     return false;else{ 
     return super.onTouchEvent(event); 
     } 
    } 
} 

参考: How do disable paging by swiping with finger in ViewPager but still be able to swipe programmatically?

+0

它不是working.while改变进度页面获取刷卡 –

+0

检查我的编辑ANS –

+0

,我应该写this.i没有延伸viewpager.if我把这个在我所提到的上述我得到错误onInterceptTouchEvent –

2

我发现了一个简单的方法来做到这一点,与它的适配器。

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

/** 
* Created by paul.boldijar on 2/24/2015. 
*/ 
public class SimpleFragmentAdapter extends FragmentPagerAdapter { 

    private Fragment[] fragments; 

    private boolean locked = false; 
    private int lockedIndex; 


    public void setLocked(boolean locked, int page) { 
     this.locked = locked; 
     lockedIndex = page; 
     notifyDataSetChanged(); 
    } 

    public SimpleFragmentAdapter(FragmentManager fm, Fragment[] fragments) { 
     super(fm); 
     this.fragments = fragments; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     if (locked) return fragments[lockedIndex]; 
     return fragments[position]; 

    } 
    @Override 
    public int getCount() { 
     if (locked) return 1; 
     return fragments.length; 
    } 
} 

如果你想锁定你的片段到一个页面,只需调用fragment.setLocked(true,page); 其中page是要锁定的页面的索引。

+0

fully..some次页面可能再次刷卡,这应该是最upvoted答案,而不是使定制viewpager,这是这么多高雅,简单... – PirateApp

1

根据保罗的解决方案,我修改了它支持显示标题以及

public static class MainPagerAdapter extends FragmentStatePagerAdapter { 
    private Fragment[] fragments; 
    private String[] titles; 
    private boolean locked = false; 
    private int lockedIndex; 

    public MainPagerAdapter(FragmentManager fm, Fragment[] fragments, String[] titles) { 
     super(fm); 
     this.fragments = fragments; 
     this.titles = titles; 
    } 

    public void setLocked(boolean locked, int page) { 
     this.locked = locked; 
     lockedIndex = page; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     if (locked) return fragments[lockedIndex]; 
     return fragments[position]; 
    } 

    @Override 
    public int getCount() { 
     if (locked) return 1; 
     return fragments.length; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     if (locked) return titles[lockedIndex]; 
     return titles[position]; 
    } 
} 

我用的是这么说的方式

Fragment[] fragments = {//Create fragment objects here...}; 
    String[] titles = getResources().getStringArray(R.array.tabs); 
    MainPagerAdapter adapter = new MainPagerAdapter(getSupportFragmentManager(), fragments, titles); 
    adapter.setLocked(true, 0); 
    mPager.setAdapter(adapter);