onPageChangeListener()如何知道代码所针对的页面?

时间:2016-12-29 15:51:27

标签: android android-fragments android-viewpager

我有3个标签,我已经使用片段实现了。让我们说每次刷到Tab2时,我都希望执行相同的代码,也就是说,我希望每次都重新加载Tab2内容。这背后的原因是在Tab1中,用户有一些选项可以通过它来更改tab2中显示的内容。因此每次他从Tab2转到Tab1,再回到Tab2 ......可以预期Tab2中的一些变化。     我尝试将此代码放入onCreateView() ...但是我的应用程序中显示onCreateView()仅在开始时被调用一次,而不再被调用。我已经了解到另一种方法是使用onPageClickListener。现在我怀疑了。我在MainActivity中实现了一个ViewPager类来创建我的标签。因此,我的onPageListener也出现在MainActivity.java中,而不是Tab2.java类中。     所以假设我在textView中制作了Tab2.xml ....我在onPageListener中为它编写代码,希望在我滑动到Tab2时控制Tab2中的textView。但应用程序如何知道onPageListener中的此代码是否适用于Tab2? onPageListener适用于所有标签,因此我如何指定此代码用于哪个标签?

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是创建InterfaceFragments中的所有ViewPager都会实现。类似的东西:

public interface TabSelectedListener {

    void onSelected();
}

然后你让每个片段实现它:

public class TabTwoFragment extends Fragment implements TabSelectedListener {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {

        // instantiate any member classes
    }

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        // inflate the view and bind any View items (TextViews, etc)
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {

        // do any setup of your view to get it into it's initial state
    }

    @Override
    void onSelected() {

        // any code which you want to run when the Fragment is selected in the ViewPager
        // note that this is the method we created in the TabSelectedListener interface
    }
}

然后在你的pageChangeListener中,您需要从适配器中获取所选的片段并将其转换为您的接口,以便您可以调用该方法:

pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}

    @Override
    public void onPageSelected(int position) {

        TabSelectedListener listener = (TabSelectedListener) adapter.getItem(position);
        listener.onSelected();
    }

    @Override
    public void onPageScrollStateChanged(int state) {}
});

这样你的Activity就不必知道哪个片段做了什么。您还可以向每个片段添加您想要的任何代码,这些代码将在聚焦时运行。