当前位置: 首页 > 知识库问答 >
问题:

滑动时的ViewPager更新片段

司寇季
2023-03-14

我尝试使用onTabSelected来检测某个片段何时被选中,然后在接口的帮助下从该片段启动一个方法(下面的代码)。

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。start方法的代码是:

public void Start() {
    TextView tv = _view.findViewById(R.id.text);
    tv.setText("test");
}

在以下行抛出异常:

TextView tv = _view.findViewById(R.id.text);
public interface IStartStop {
    public void Start();
    public void Stop();
}

是的,我已经在网上查过了所有可用的东西,但似乎没有任何东西对我有用。

非常感谢您的帮助!

共有1个答案

吕嘉荣
2023-03-14

令人惊讶的是,viewpager并不是“原生”地(在其他方面)这样做的。但并不是全部都失去了。

首先,您必须修改您的片段,以便它们只在您告诉它们可以的时候运行动画,而不是在它们被实例化的时候。这样,您就可以使用viewpager偏移量(默认值=3),并有2-3个片段预加载,但不是动画。

第二步是创建一个接口或类似的定义何时“片段已变得可见”。

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) {
            }
        });
public interface YourFragmentInterface {
    void fragmentBecameVisible();
}

3)更改片段,使其实现以下内容:

public class YourLovelyFragment extends Fragment implements YourFragmentInterface {

4)在片段中实现接口

@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.
}

从这里到哪里去?

 类似资料:
  • 下面是: 这是我要用于向中添加项的方法

  • 我正在考虑一个简单的例子,包括以下部分: Main活动:有编辑文本、按钮、viewPager 碎片A:什么都没有 碎片B:有文本视图 所以,在屏幕上,你可以滑动查看每个片段。我希望我的例子有这样一个功能:如果一个人在editText中写了一个文本,然后点击按钮,它就会出现在片段B中。 A使用notifyDatsetChanged()尝试了它,但不起作用。有人能帮忙吗?下面是我的全部代码: 主要活动

  • 我痛苦了3天。我正在使用兼容性库中的视图分页程序。我已经成功地让它显示了几个视图。我的问题是,当我交换视图时,不会在它的回收器视图中按片段更新数据。但当我关闭应用程序时,打开碎片会按回收器视图显示更新内容。我使用了所有方法,如setnotifydatachanged()和许多其他方法,但viewpager中的片段不更新内容。感谢所有的帮助,这是我的主要活动

  • 我有一个,有4个选项卡。

  • 我在javaFX项目中使用了一个滑块,我有一个标签,当我移动滑块时会更新。 我希望在拖动滑块时更新标签,而不仅仅是在拖放时。 这是我的代码: