android - 每 5 秒自动滑动标签项

标签 android timer android-tablayout

我在我的 android 应用程序中创建了一个带有 3 个选项卡项的选项卡控件。

<android.support.design.widget.TabLayout
        android:background="@color/colorPrimary"
        android:layout_alignParentTop="true"
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        >
</android.support.design.widget.TabLayout>

PagerAdapter 的帮助下,它按预期正常工作。但是现在,我想自动完成。也就是说,每 5 秒,选项卡应自动滑动到下一个。它会一直持续到用户触摸屏幕。如何在我的应用程序中添加此计时功能?

我的 PagerAdapter 类是,

public class PagerAdapter  extends FragmentStatePagerAdapter{
    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment frag=null;
        switch (position){
            case 0:
                frag=new GameFragment();
                break;
            case 1:
                frag=new MovieFragment();
                break;
            case 2:
                frag=new StudyFragment();
                break;
        }
        return frag;
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        String title=" ";
        switch (position){
            case 0:
                title="Game";
                break;
            case 1:
                title="Movie";
                break;
            case 2:
                title="Study";
                break;
        }

        return title;
    }
}

最佳答案

你可以做这样的事情来自动滑动标签:

int NUM_PAGES = 3;
int currentPage = 0;
boolean touched = false;
Handler handler = new Handler();
Runnable update;
private void startPagerAutoSwipe() {
    update = new Runnable() {
        public void run() {
            if(!touched){
                if (currentPage == NUM_PAGES) {
                    currentPage = 0;
                }
                pager.setCurrentItem(currentPage++, true);
            }
        }
    };
    Timer swipeTimer = new Timer();
    swipeTimer.schedule(new TimerTask() {
        @Override
        public void run() {
            handler.post(update);
        }
    }, 5000, 5000);
}

要在点击其中一个 fragment 时停止自动滑动,您可以将 onTouchListener 用于您的布局:

layout.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()){
            case MotionEvent.ACTION_DOWN:
                touched = true;
                return true;

            case MotionEvent.ACTION_UP:
                touched = false;
                return true;
        }
        return false;
    }
});

关于android - 每 5 秒自动滑动标签项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38115812/

相关文章:

javascript - 播放来自 YouTube 的视频时出现黑屏 : Phonegap Android

c# - 运行速度超过 15 毫秒的秒表

android - fragment 在 tabLayout 中多次出现

android - 如何更改选项卡布局的文本颜色?

java - 在 Java 中从对象转换为 XML 的问题

android - 如何检测何时在 Android 中建立了 WIFI 连接?

java - 如何在 Genymotion 上安装 Twitter 和 Facebook 等其他应用程序

java - 我的 java 类更新程序不更新

android - 处理程序 postDelayed 按配置延迟更长的时间

Android - AndroidX 中的 TabLayout