gpt4 book ai didi

android - onPageChangeListener() 如何知道代码针对哪个页面?

转载 作者:行者123 更新时间:2023-11-30 00:48:51 25 4
gpt4 key购买 nike

我有 3 个选项卡,我使用 fragment 实现了这些选项卡。假设我每次滑动到 Tab2 时,我都希望执行相同的代码,即我希望每次都重新加载 Tab2 内容。这背后的原因是,在 Tab1 中,用户有一些选项可以更改要在 tab2 中显示的内容。因此,每次他从 Tab2 转到 Tab1,再回到 Tab2 时……可以预期 Tab2 会发生一些变化。 我尝试将此代码放入 onCreateView() ...但它出现在我的应用程序中 onCreateView() 只在开始时被调用一次,再也不会被调用。我了解到另一种方法是使用 onPageClickListener 。现在继承人我的疑问。我在 MainActivity 中实现了一个 ViewPager 类来创建我的选项卡。所以我的 onPageListener 也存在于 MainActivity.java 中,而不是在 Tab2.java 类中。 所以假设我在 Tab2.xml 中制作了一个 textView .... 我在 onPageListener 中为它编写代码,期望它控制 textView 当我滑动到 Tab2 时在 Tab2 中。但是应用程序如何知道 onPageListener 中的这段代码是针对 Tab2 的? onPageListener 适用于所有选项卡,那么我如何指定此代码适用于哪个选项卡?

最佳答案

实现此目的的一种方法是创建一个 Interface,您的 ViewPager 中的所有 Fragments 都将实现该接口(interface)。像这样的东西:

public interface TabSelectedListener {

void onSelected();
}

然后让每个 Fragments 实现它:

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 中,您需要从适配器中获取选定的 fragment 并将其转换为您的接口(interface),以便您可以调用该方法:

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 就不必知道哪个 Fragment 做了什么。您还可以向每个 Fragment 添加您想要的任何代码,这些代码将在它们获得焦点时运行。

关于android - onPageChangeListener() 如何知道代码针对哪个页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41382987/

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