我无法以编程方式创建和添加视图寻呼机。
我发现了这个问题Android create ViewPager programmatically,但接受的答案对我不起作用。
这是相关代码。
ImagesPagerAdapter mImagePagerAdapter = new ImagesPagerAdapter(getActivity(), mProduct.getImages());
ViewPager mImagePager = (ViewPager) inflater.inflate(R.layout.partial_view_pager, null);
mImagePager.setAdapter(mImagePagerAdapter);
rootView.add(mImagePager);
我也尝试修改第二行但没有效果:
ViewPager mImagePager = new ViewPager(getActivity());
视图寻呼机不会显示在渲染的布局中。如果我调试我可以看到它实例化视图,但他们只是不显示。我尝试添加解决方案中建议的ID,并在布局partial_view_layout中设置id。
唯一可行的方法是,如果我在布局中直接通过xml添加视图分页器。这不是我的选择,因为我希望能够将多个视图寻呼机添加到同一布局。
有什么想法吗?
答案 0 :(得分:1)
您的问题非常重要,它不仅适用于ViewPager
,而且适用于一般情况:"如何动态创建视图?"
三个步骤:
View
对象LayoutParams
(以便视图可以告诉布局它想要的大小等)。对于ViewPager,您有一些缺失的细节:
// this is the container for the ViewPager
FrameLayout mRootView;
mRootView = (FrameLayout) findViewById(R.id.root_layout);
ViewPager viewPager = new ViewPager(this);
viewPager.setId(View.generateViewId()); // --> this is important!
viewPager.setAdapter(new CustomViewPagerAdapter(getSupportFragmentManager(), this));
// --> Important! *
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
viewPager.setLayoutParams(params);
// --> Important!
mRootView.addView(viewPager, viewPager.getLayoutParams());
最后一点,取决于您使用的Layout
,您必须更改您使用的LayoutParams
:
即。
RelativeLayout - > RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(...)
LinearLayout - > LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(...)