【问题标题】:Get view from ViewPager before fragment finishing onCreateView在片段完成 onCreateView 之前从 ViewPager 获取视图
【发布时间】:2016-08-06 06:58:04
【问题描述】:

现在我在片段中有一个 ViewPager。我需要获取/使用 ViewPager 第一页中的一些视图。我的问题是如何在片段中完成 onCreateView 方法之前获得这些视图?

这是我的一些代码:

MyFragment.java:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mFragmentLayout = inflater.inflate(R.layout.profile_fragment, container, false);

    ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
    MyPagerAdapter myPagerAdapter = new MyPagerAdapter(getContext());
    viewPager.setAdapter(myPagerAdapter);

    View firstView = myPagerAdapter.getFirstView();

    // I need to get the view of the first page and find TextView inside that view.
    // My problem is that firstView is null
    // since viewPager doesn't call instantiateItem yet when below sentence runs.
    mTextView = (TextView) firstView.findViewById(R.id.text);
    return mFragmentLayout;
}

MyPagerAdapter.java:

private View firstView;

@Override
public Object instantiateItem(ViewGroup collection, int position) {
    View layout = mInflater.inflate(R.layout.mixin, collection, false);

    // Other logic to set the page

    if (position == 0) {
        firstView = layout;
    }
    collection.addView(layout);
    return layout;
}

public View getFirstView() {
    return firstView;
}

看起来当我调用 getFirstView() 时 ViewPager 没有开始启动,所以我得到了 null;

我也可以将片段中的视图传递到 ViewPager,但我不知道该怎么做,因为它仅适用于第一页。如何只设置第一页的视图。

【问题讨论】:

    标签: android android-layout android-fragments android-viewpager android-lifecycle


    【解决方案1】:

    改变 ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);

    ViewPager viewPager = (ViewPager) mFragmentLayout.findViewById(R.id.view_pager);

    从你的 infaleted 布局中获取 ViewPager

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mFragmentLayout = inflater.inflate(R.layout.profile_fragment, container, false);
    
        ViewPager viewPager = (ViewPager) mFragmentLayout.findViewById(R.id.view_pager);
        MyPagerAdapter myPagerAdapter = new MyPagerAdapter(getContext());
        viewPager.setAdapter(myPagerAdapter);
    
        View firstView = myPagerAdapter.getFirstView();
    
        // I need to get the view of the first page and find TextView inside that view.
        // My problem is that firstView is null
        // since viewPager doesn't call instantiateItem yet when below sentence runs.
        mTextView = (TextView) firstView.findViewById(R.id.text);
        return mFragmentLayout;
    }
    

    【讨论】:

    • 它不起作用,firstView 仍然为 null,因为尚未调用 instantiateItem
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多