gpt4 book ai didi

android - 如何使用 ViewPager 延迟动态 View 更改?

转载 作者:行者123 更新时间:2023-11-29 22:03:27 24 4
gpt4 key购买 nike

这是我在这里的第一篇文章,也是我第一次尝试用英语解释编码问题。所以请在阅读本文时保持温和:)。

我有两个关于 ViewPager 的问题。

首先:

如果我将 fragment 列表传递给 PagerAdapter,它将显示列表中的第一个 fragment 。是否可以修改它以便能够首先显示列表中的第二个,第三个...... fragment ?因为 setCurrentItem(page) 方法将在 PagerAdapter 显示第一个 fragment 后显示页面。

第二个:

我尝试在动态 ViewChange 之间实现暂停,如下所示:

// pass the Fragments to pagerAdapter here which will show the first fragment

// loop for the other Fragments
handler.postDelayed(new Runnable(){
public void run(){
for(int i = 0; i < list.size(); i++){
ViewPager.setCurrentItem(list.indexOf(i), true);
// Set Pause here
}
}
}, 500);

注释“在此处设置暂停”标记了我仍在尝试在分页之间暂停的位置。但我不知道如何解决这个问题。因为 Thread.sleep 在这里不是真正的交易。

想法是用 PageAdapter 显示第一个 fragment 。然后我使用 handler.postDelayed 来延迟第二次页面滑动。在这个过程中,我以恒定的延迟遍历所有页面。

如果有人能帮我找到解决这些问题的方法,我会很高兴。

最佳答案

对于您的第一个问题,您是在调用 setCurrentItem(int, false) 吗?如果您只是调用 setCurrentItem(int),如果 ViewPager 已经通过其当前适配器完成了第一个布局,则 ViewPager 将动画转换。如果这不是解决方案,可以考虑在布局文件中使用 visibility = "invisible" 初始化 ViewPager(或者调用 setVisibility(View.INVISIBLE ),然后将 fragment 列表传递给 PagerAdapter。)然后,在调用 setCurrentItem 之后,您可以使用 setVisibility 将 ViewPager 设置回可见状态(查看。可见)。我认为在 onCreate 中设置 ViewPager 并调用 setCurrentItem(int, false) 应该可以防止出现任何动画,但我现在没有时间进行测试。

对于第二个问题,我认为让您感到困惑的部分是 run 方法将在运行时阻塞整个 UI 线程,这意味着 UI 不会能够在您循环浏览 ViewPager 中的项目时自行更新。

本质上,您是在 UI 线程上调用 Thread.sleep()。这可能并不完全清楚,因为它在 Runnable 的运行方法中,除非您意识到您已经发布了一条消息以在处理程序的线程上运行,如果您使用默认处理程序在 Activity 生命周期方法中创建它,它将成为 UI 线程( ) 构造函数。相反,您希望您发布的 Runnable 为下一次您想要更改 ViewPager 中的当前项目时发布一条新消息。

我会做的是类似下面的事情(警告 - 我还没有测试过):

子类 Handler 以添加一个连续循环的方法(我假设您将此操作作为包含 ViewPager 的 Activity 的内部类,以便您可以访问包含 ViewPager 的成员变量。我在下面的代码中调用该成员变量 mPager):

private Runnable mLoopingRunnable = new Runnable(){
public void run() {
int currentItem = mPager.getCurrentItem();
int totalItems = mPager.getAdapter().getCount();
int nextItem = (currentItem + 1) % totalItems;
mPager.setCurrentItem(nextItem, true);
handler.postDelayed(self, 500);
}
};

handler.postDelayed(mLoopingRunnable, 500);

如果/当你想停止循环时(请注意,如果你想在某个时候取消它,你需要保留 Runnable 的句柄):

handler.removeCallbacks(mLoopingRunnable);

请注意,如上所示更改调用 setCurrentItem 的一个优点是它不会干扰用户滑动 ViewPager 从一个 View 移动到下一个 View 。如果您只是像在循环中那样将 currentItem 设置为某个整数,则当用户与寻呼机交互时,行为会显得有些奇怪。

我猜想有类似 ViewFlipper 的东西可以自动处理循环,但粗略地看一下 ViewPager API 并不明显。

关于android - 如何使用 ViewPager 延迟动态 View 更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11395579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com