现在我在片段中有一个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,但我不知道该怎么做,因为它只适用于第一页。如何只设置第一页的视图。
答案 0 :(得分:0)
更改
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;
}