35

我正在尝试从片段内部访问父 viewpager,但我不知道该怎么做。我需要在片段内的 onClick 事件之后切换 ViewPager 上的 currentItem。

有任何想法吗?

编辑:

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

4

4 回答 4

101

从片段中,调用 getActivity() 它将为您提供托管片段的活动。然后调用 findViewById(ViewPagerId) 来获取 ViewPager。

ViewPager vp=(ViewPager) getActivity().findViewById(ViewPagerId);
于 2012-08-28T05:10:35.617 回答
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
    }

科特林版本:

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, 
    savedInstanceState: Bundle) {

        val pager = container as ViewPager
        //.... Rest of your method
    }
于 2015-01-10T17:16:30.903 回答
2

方法onCreateViewonViewCreatedonAttach调用得太早。

onResume该视图在片段的方法中肯定附加到其父视图。这是一个很好的地方然后使用getView().getParent()

于 2016-07-21T12:51:53.893 回答
1

另一种帮助我的方法:

                List<Fragment> fragment = getActivity().getSupportFragmentManager().getFragments();
                for (Fragment f:fragment) {
                    if (f instanceof CreatCheckInFragment){
                        ((ParentFragment) f).viewPager.arrowScroll(View.FOCUS_LEFT);
                    }
                }
于 2019-03-29T22:01:40.853 回答