以编程方式创建/添加视图寻呼机

时间:2015-03-08 20:28:33

标签: android android-layout android-viewpager android-xml android-inflate

我无法以编程方式创建和添加视图寻呼机。

我发现了这个问题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添加视图分页器。这不是我的选择,因为我希望能够将多个视图寻呼机添加到同一布局。

有什么想法吗?

1 个答案:

答案 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(...)