从Fragment中获取父ViewPager视图

35

我正在尝试从片段内部访问父ViewPager,但我不知道如何做到这一点。我需要在片段内的onClick事件后切换ViewPager上的currentItem。

有什么想法吗?

编辑:

我想访问父视图(ViewPager View),以便我可以从我的一个片段内部更改可见的currentItem。


你的问题不够清晰,请添加更多相关信息。 - Krishnakant Dalal
4个回答

102

从 Fragment 中调用 getActivity() 方法,可以获取托管该 Fragment 的 Activity。然后调用 findViewById(ViewPagerId) 方法来获取 ViewPager。

ViewPager vp=(ViewPager) getActivity().findViewById(ViewPagerId);

1
整天都在苦思冥想,直到晚上才发现了你的答案,非常感谢。 - Sourabh Kumar Sharma
这真是太有帮助了,早些时候应该想到这个的 :( - Lazar Kukolj

35

编辑:我必须补充说明,尽管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
    }

2

onCreateViewonViewCreatedonAttach方法被调用得太早了。

在片段的onResume方法中,视图肯定已经附加到其父视图上了。这是使用getView().getParent()的好地方。


1
另外一个帮助我的方法是:
                List<Fragment> fragment = getActivity().getSupportFragmentManager().getFragments();
                for (Fragment f:fragment) {
                    if (f instanceof CreatCheckInFragment){
                        ((ParentFragment) f).viewPager.arrowScroll(View.FOCUS_LEFT);
                    }
                }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接