我有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
适用于所有标签,因此我如何指定此代码用于哪个标签?
答案 0 :(得分:1)
执行此操作的一种方法是创建Interface
,Fragments
中的所有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就不必知道哪个片段做了什么。您还可以向每个片段添加您想要的任何代码,这些代码将在聚焦时运行。