Android: 如何通过按钮点击禁用在TabLayout控件之间滑动

5

在我的选项卡布局中有两个片段。我成功地通过按钮单击禁用了选项卡布局之间的滑动功能。怎样在我的onclick按钮中实现禁用功能。提前感谢。

MainActivity

public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener{


private TabLayout tabLayout;

private ViewPager viewPager;
int ans =2;

 ------FCViewPager disable;------

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    tabLayout = (TabLayout) findViewById(R.id.tabLayout);

    BasePagerAdapter adapter = new BasePagerAdapter(getSupportFragmentManager());
    Tab1 tab1 = new Tab1();
    Tab2 tab2 = new Tab2();


    adapter.addFragment(tab1, "1");
    adapter.addFragment(tab2, "2");

    viewPager = (ViewPager) findViewById(R.id.pager);


    viewPager.setAdapter(adapter);


    tabLayout.setOnTabSelectedListener(this);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    tabLayout.setupWithViewPager(viewPager);

}

-----公共 void 测试(视图查看){

        disable.setEnableSwipe(false);

}---------
@Override
public void onTabSelected(TabLayout.Tab tab) {
    viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(TabLayout.Tab tab) {

}


@Override
public void onTabReselected(TabLayout.Tab tab) {

}
public class BasePagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    public BasePagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }


    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }


    public void removeFragment(int position) {
        mFragmentTitleList.remove(position);
        mFragmentList.remove(position);
        notifyDataSetChanged();

    }
    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }
    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

}

选项卡1

 public class Tab1 extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View h = inflater.inflate(R.layout.tab1, container, false);

    return  h;
}

}

Tab2

public class Tab2 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View h = inflater.inflate(R.layout.tab2, container, false);
        return h;
    }

这是Java代码,你不应该将它标记为JavaScript。 - user6360214
你想实现哪个禁用的功能? - Tixeon
@Sanny 禁用选项卡之间的滑动,通过按钮 onclick 控制。 - AnthonyTang
类似的问题在这里:https://dev59.com/fF0b5IYBdhLWcg3wO_E_ - Tixeon
你如何禁用滑动功能?我只想在选项卡点击时更改片段。 - Sidhartha
2个回答

10
您可以在ViewPager中禁用滑动功能。按照以下步骤创建自定义ViewPager。
public class FCViewPager extends ViewPager {

    private boolean enableSwipe;

    public FCViewPager(Context context) {
        super(context);
        init();
    }

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

    private void init() {
        enableSwipe = true;
    }

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

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // Never allow swiping to switch between pages
        return enableSwipe && super.onTouchEvent(event);

    }

    public void setEnableSwipe(boolean enableSwipe) {
        this.enableSwipe = enableSwipe;
    }
}

在你的MainActivity中

//R.id.pager has to be FCViewPager not default ViewPager
viewPager = (FCViewPager) findViewById(R.id.pager); 

您的按钮onClick函数

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pager.setEnableSwipe(false);
            }
        });

我这样声明-----FCViewPager disable;-----但它不起作用。 - AnthonyTang
在 public boolean onInterceptTouchEvent(MotionEvent event) { } 中,直接返回 false 怎么样? - Tixeon
1
我修改了MainActivity中的代码,你能帮我检查一下这种实现方法是否正确吗? - AnthonyTang
它必须在您的包名称下,而不是在 android.view 内。 - Tixeon
太棒了。编程愉快,兄弟:D - Tixeon
显示剩余7条评论

1
禁用ViewPager的用户滚动,以便默认情况下和通过编程启用或禁用滚动。
public class ScrollDisabledViewpager extends ViewPager {
    private boolean isPagingEnabled = false;

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

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

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return this.isPagingEnabled && super.onTouchEvent(event);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return this.isPagingEnabled && super.onInterceptTouchEvent(event);
    }

    public void setPagingEnabled(boolean b) {
        this.isPagingEnabled = b;
    }
}

按钮onClick事件中,您可以设置此项为true/false以启用/禁用滚动。

viewPager.setPagingEnabled(true/false);


Java: 55 = disable.setPagingEnabled(false); Java:55 = disable.setPagingEnabled(false); - AnthonyTang
这是我的声明:ScrollDisabledViewpager disable; - AnthonyTang
在访问viewpager之前,你是否初始化了它?如果没有初始化,就会出现空指针异常。 - Hemanth S
ScrollDisabledViewpager pager = (ScrollDisabledViewpager) findViewById(R.id.pager); 滚动禁用视图翻页器 pager =(ScrollDisabledViewpager)findViewById(R.id.pager); - Hemanth S
初始化我的ViewPager之后 - AnthonyTang
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接