【问题标题】:Change the current fragment of ViewPager from other fragment从其他片段更改 ViewPager 的当前片段
【发布时间】:2020-01-23 08:29:43
【问题描述】:

我有一个Fragment,其中包含viewpager

ViewPager里面我还有3个片段,Fragment-AFragment-BFragment-C

Fragment A里面我有一个Button,在ButtononClick()我想把当前项目改成Fragment C

我怎样才能实现它?请帮忙

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    如果按钮不在主片段中,则必须定义一个接口来在主片段和子片段之间进行通信,即片段 A B C。

    public interface GoToNextFragment {
    void onGoToFragment(int index);
    }
    

    您的 MainFragmet 将必须实现此接口及其附带的方法:

    public class MainFragment extends Fragment implements GoToNextFragment {
    //Your regular methods...
    @Override
    public void onGoToFragment(index) {
    if (myAdapter != null) {
    myAdapter.setCurrentItem(index);
    }
    }
    

    仍然在您的 MainFragment 中,在您的 Fragment 上设置接口:

    fragment1.setInterface(this);
    fragment2.setInterface(this);
    

    在您的 Fragments 中,添加 setInterface 方法:

    private GoToNextFragment mInterface;
    
    public void setInterface(GoToNextFragment i) {
    mInterface = i;
    }
    

    最后在片段a中,触发效果:

    button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    if (mInterface != null) {
      mInterface.onGoToFragment(2);
    }
    });
    

    【讨论】:

    • 如何获取 Fragment 1 的实例,如 fragment.setInterface(this)?
    • 谢谢。但是如何在 MainFragment 中获取 Fragment1 的实例?
    • 为什么要在MainFragment中获取Fragment1的实例?
    • 要在 MainFragment 中获取 Fragment1 的实例,您必须在 Fragment1 中定义一个函数,该函数会将 Fragment1 的实例返回给 MainFragment。
    • 通过使用 fragment1.setinterface(this) 我们将 MainFragment 的上下文发送到 fragment1。此处无需获取 fragment1 的实例。对不起,我把你的问题弄错了
    【解决方案2】:

    在你的 clickHandler 中添加这个方法 viewpager.setCurrentItem(int index)

    【讨论】:

    • 如何获取 viewpager 对象。它在包含视图寻呼机的片段 A、B、C 的主片段网络中
    【解决方案3】:
    viewpager.postDelayed(new Runnable() {
    
            @Override
            public void run() {
                viewpager.setCurrentItem(2);
            }
        }, 100);
    

    这里 2 是您的 Fragment C 索引。

    更新

    无需在 Fragment A 中创建 viewpager 对象。 只需创建一个在您的 ActivityFragment 中扩展的接口,其中包含 ViewPager 并将其实现到 Fragment A 中。

    【讨论】:

    • 是的。如何从 Fragment A 访问 viewpager 的对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多