我正在尝试从片段内部访问父ViewPager,但我不知道如何做到这一点。我需要在片段内的onClick事件后切换ViewPager上的currentItem。
有什么想法吗?
编辑:
我想访问父视图(ViewPager View),以便我可以从我的一个片段内部更改可见的currentItem。
我正在尝试从片段内部访问父ViewPager,但我不知道如何做到这一点。我需要在片段内的onClick事件后切换ViewPager上的currentItem。
有什么想法吗?
编辑:
我想访问父视图(ViewPager View),以便我可以从我的一个片段内部更改可见的currentItem。
从 Fragment 中调用 getActivity() 方法,可以获取托管该 Fragment 的 Activity。然后调用 findViewById(ViewPagerId) 方法来获取 ViewPager。
ViewPager vp=(ViewPager) getActivity().findViewById(ViewPagerId);
编辑:我必须补充说明,尽管Eldhose的答案可行,但我会辩护我的方法。因为碎片对包含它的Activity了解得越少,就越好。通过这样做,您可以在不依赖ID的情况下获取父视图,并且即使它不是ViewPager,仍然可以从中获取信息。
您可以在Fragment的onCreateView
方法中获取它。
container
参数是父视图,在这种情况下是ViewPager。
在Java中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewPager pager = (ViewPager) container;
//.... Rest of your method
}
Kotlin 版本:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup,
savedInstanceState: Bundle) {
val pager = container as ViewPager
//.... Rest of your method
}
onCreateView
、onViewCreated
和onAttach
方法被调用得太早了。
在片段的onResume
方法中,视图肯定已经附加到其父视图上了。这是使用getView().getParent()
的好地方。
List<Fragment> fragment = getActivity().getSupportFragmentManager().getFragments();
for (Fragment f:fragment) {
if (f instanceof CreatCheckInFragment){
((ParentFragment) f).viewPager.arrowScroll(View.FOCUS_LEFT);
}
}