- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个问题,过去 2 天我一直在努力解决。
我正在构建一个使用 ActionBar、ViewPager 和 FragmentPagerAdapter 的应用程序。Activity、Fragments 和 FragmentPagerAdapter 的代码与 http://developer.android.com/reference/android/support/v4/view/ViewPager.html 上的 android 示例中所述的完全相同。
我面临的问题是——假设我在 viewPager 中只有 2 个 fragment 。在两者之间切换/滑动时, fragment 没有得到更新。 onResume 不会被调用,因为 viewPager 在显示的 fragment 的任一侧缓存了至少 1 个 fragment 。
我尝试使用 onTabSelected 来检测何时选择了一个 fragment ,然后在接口(interface)的帮助下从该 fragment 启动一个方法(下面的代码)。
public void onTabSelected(Tab tab, FragmentTransaction ft) {
TabInfo tag = (TabInfo)tab.getTag();
for (int i=0; i<mTabs.size(); i++) {
if (mTabs.get(i) == tag) {
mViewPager.setCurrentItem(i);
}
}
((IStartStop)getItem(tab.getPosition())).Start();
}
但是,当使用 Start 方法时,尝试更新 TextView 时会触发 NullPointerException。启动方法的代码是:
public void Start() {
TextView tv = _view.findViewById(R.id.text);
tv.setText("test");
}
在以下行抛出异常:
TextView tv = _view.findViewById(R.id.text);
IStartStop 接口(interface)非常简单:
public interface IStartStop {
public void Start();
public void Stop();
}
我不想使用 notifyDataSetChanged();使用 POSITION_NONE 因为每次我滑动到新 fragment 时,加载 fragment 需要几秒钟
此时的fragment只包含一个textview,以后会有动画,所以很重要:
1- 仅在选择 fragment 时运行动画,而不是在选择它旁边的 fragment 时运行动画(ViewPager 缓存和恢复 fragment 的方式)。
2- 当 fragment 不再被选中时停止动画以避免浪费设备资源。
是的,我已经检查了互联网上的所有可用内容,但似乎没有任何东西适合我。
非常感谢您的帮助!
最佳答案
令人惊讶的是,ViewPager
并没有“ native ”执行此操作(除其他外)。但并非全部丢失。
首先,您必须修改 fragment ,以便它们仅在您告诉它们可以运行时才运行动画,而不是在它们被实例化时运行。通过这种方式,您可以使用 viewpager 偏移量(默认 = 3)并预加载 2-3 个 fragment 但没有动画。
第二步是创建一个接口(interface)或类似的接口(interface)来定义“fragment 何时变得可见”。
第三步是将一个新的 OnPageScrollListener 附加到您的 viewpager。
代码如下(半未经测试的代码):
1) 附加监听器:
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(final int i, final float v, final int i2) {
}
@Override
public void onPageSelected(final int i) {
YourFragmentInterface fragment = (YourFragmentInterface) mPagerAdapter.instantiateItem(mViewPager, i);
if (fragment != null) {
fragment.fragmentBecameVisible();
}
}
@Override
public void onPageScrollStateChanged(final int i) {
}
});
2) 这是你的界面:
public interface YourFragmentInterface {
void fragmentBecameVisible();
}
3) 更改您的 fragment ,以便它们实现此功能:
public class YourLovelyFragment extends Fragment implements YourFragmentInterface {
4) 在 fragment 中实现接口(interface)
@Override
public void fragmentBecameVisible() {
// You can do your animation here because we are visible! (make sure onViewCreated has been called too and the Layout has been laid. Source for another question but you get the idea.
}
从这里到哪里去?
您可能希望实现一种方法/监听器来通知“其他” fragment 它们不再可见(即,当一个 fragment 可见时,其他 fragment 不可见)。但这可能不是必需的。
关于android - 滑动时 ViewPager 更新 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20412379/
我目前面临将 ViewPager 放入另一个 ViewPager 中的问题,两者都可滑动。我成功创建了我的第一个 ViewPager,它包含三个页面,中间一个是第二个(内部)ViewPager,其中包
在我的主要 Activity 中,我有一个水平 viewpager。在 viewpager 的一个 fragment 中,我有另一个垂直 viewpager。两者都很好。但是对于水平 viewpage
我想创建一个 ViewPager(包含三个项目),其中每个 View 都是另一个 ViewPager(包含两个项目)。用户然后像这样滑动项目: ViewPager1[0] ViewPager2[0]
如何修复这个错误 setupWithViewPager(android.support.v4.view.ViewPager) in TabLayout cannot br applied to (an
我有一个包含 3 张图片的数组的 viewPage,我想在缩放其中一张时锁定 viewPager,因为当我在右侧滚动时,会出现下一张照片!这是我的代码 enter code here public
我是第一次实现 ViewPager,我遇到了一些问题,因为我收到以下错误: 06-20 10:40:51.366 11377-11377/com.example.ruelas.elite E/Andr
我真的是 android 的新手,如果对我的类(class)作业有任何帮助,我将不胜感激。 我需要做的: 1) 在一个 Activity 中有两个 ViewPagers(未嵌套) 2)两个ViewPa
我正在自定义我的 Android 应用程序以在四个方向上滑动,我正在使用 ViewPager 水平 和 VerticalViewPager 滑动垂直滑动(这就像对 DirectionalViewPag
我需要为平板电脑创建一个 ViewPager,在平板电脑的左侧会有导航按钮供用户选择。例如。 左侧导航将有 4 个图像按钮,每个项目将用户带到不同的教程。每个图像按钮都会加载一个 ViewPager。
我用过Vertical Viewpager在我的显示数据集合的项目中。在单个数据(项目)中,我有更多图像要显示。所以我尝试使用 viewpager。 但是当我水平滚动时,它会阻止垂直 Viewpage
我有一个父级 ViewPager,它的每个页面都包含一个子级 ViewPager。子 ViewPager 可能包含一个 ListView 或一个垂直的 ScrollView。我想将子级 ViewPag
我的任务是创建一个非常不正统的布局,只能通过另一个 viewpager 的第二个 Pane 内的 viewpager 来完成,幸运的是外部 viewpager 需要被锁定所以任务更现实一些,但是意外的
目标是根据屏幕方向(纵向或横向)以不同的布局在屏幕上显示两个 fragment ( fragment A、 fragment B)。 当设备处于纵向模式时,一次仅显示 Frag A 和 Frag B
我想禁用父 viewpager 中的子 viewpager 的滑动。 我目前使用这个自定义子 viewpager public class CustomViewPager extends ViewPa
我有两个 ViewPager - 一个在另一个下面。现在客户希望我们添加扩展底部 ViewPager(具有三个 ListView)以覆盖顶部 ViewPager 的可能性。当我将两个 ViewPage
我用谷歌搜索了这个问题很多天。找到一个解决方案,在Viewpager的开头和结尾添加一个空白View。当viewpager.getcurrentItem()==0时,则重新指向1。在我看来这种做法非常
我从适配器设置标题后,标题未出现在 PagerTabStrip 中 这是我的 Activity public class MainActivity extends AppCompatActivity
我有一个 ViewPager,其中包含多个 TextView,它们具有不同的字体大小。此外,我还获得了增加/减少字体大小的按钮,通过添加其默认大小加上一个名为 STEP 的值(该值通过 inc/dec
我有一个嵌套的 ViewPager,效果非常好。唯一的问题是,一旦子 ViewPager 位于最后一项并且我进一步滚动,父 ViewPager 就会滚动。我不想要这种行为。 我如何实现这一目标? 这是
我想显示一个带有滑动抽屉的 Viewpager。Viewpager 用于滚动图像,我想在该 viewpager 的顶部放置一个滑动抽屉(从顶部到按钮)。 我附上了我的示例代码。如果您对如何实现此屏幕有
我是一名优秀的程序员,十分优秀!