ViewPager没有显示任何内容。

21

我正在使用自定义的ViewPager适配器创建ViewPager,但在运行项目时,我无法看到任何内容。

  public class CustomAdapter extends PagerAdapter {

        private List<NewsObject> newsObjects;
        private Activity mActivity;
        private LayoutInflater inflater;
        private ImageLoaderConfiguration imageConfig;
        private ImageLoader imageLoader = ImageLoader.getInstance();

        public CustomAdapter(List<NewsObject> newsObjects, Activity mActivity) {
            super();
            Log.d("Con :", "structor");
            this.newsObjects = newsObjects;
            this.mActivity = mActivity;
            imageConfig = new ImageLoaderConfiguration.Builder(
                    mActivity.getApplicationContext()).build();
            imageLoader.init(imageConfig);
        }

        @Override
        public int getCount() {
            return this.newsObjects.size();
        }

        @Override
        public void destroyItem(View collection, int position, Object view) {
            ((ViewPager) collection).removeView((View) view);
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {

            ImageViewPlus img_news_image;
            TextView txt_news_title;
            TextView txt_news_description;

            inflater = (LayoutInflater) mActivity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View viewLayout = inflater.inflate(R.layout.detail_news_page, null);

            img_news_image = (ImageViewPlus) viewLayout
                    .findViewById(R.id.img_detail_news_image);
            txt_news_title = (TextView) viewLayout
                    .findViewById(R.id.txt_detail_news_title);
            txt_news_description = (TextView) viewLayout
                    .findViewById(R.id.txt_detail_news_description);

            Log.d("TAG :", "instantiateItem");

            imageLoader.displayImage(newsObjects.get(position).getNews_image(),
                    img_news_image);

            Toast.makeText(mActivity.getApplicationContext(),
                    Constantz.newsObjects.get(position).getNews_id() + "",
                    Toast.LENGTH_SHORT).show();

            txt_news_title.setText(newsObjects.get(position).getNews_title());
            txt_news_description.setText(newsObjects.get(position)
                    .getNews_description());

            return viewLayout;
        }

    }

但是烤面包仍然显示,但我在我的应用程序上看不到任何文本

4个回答

72

写作

container.addView(viewLayout);

instantiateItem 中返回视图之前

  public Object instantiateItem(ViewGroup container, int position) {

        ImageViewPlus img_news_image;
        TextView txt_news_title;
        TextView txt_news_description;

        inflater = (LayoutInflater) mActivity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View viewLayout = inflater.inflate(R.layout.detail_news_page, null);

        img_news_image = (ImageViewPlus) viewLayout
                .findViewById(R.id.img_detail_news_image);
        txt_news_title = (TextView) viewLayout
                .findViewById(R.id.txt_detail_news_title);
        txt_news_description = (TextView) viewLayout
                .findViewById(R.id.txt_detail_news_description);

        Log.d("TAG :", "instantiateItem");

        imageLoader.displayImage(newsObjects.get(position).getNews_image(),
                img_news_image);

        Toast.makeText(mActivity.getApplicationContext(),
                Constantz.newsObjects.get(position).getNews_id() + "",
                Toast.LENGTH_SHORT).show();

        txt_news_title.setText(newsObjects.get(position).getNews_title());
        txt_news_description.setText(newsObjects.get(position)
                .getNews_description());
        container.addView(viewLayout);

        return viewLayout;
    }

8
没想到会这样。这个API的设计者最多只剩下一半的脑子了。 - NeoWang
这是一个非常古老的API,我真不敢相信我居然在使用它,而且没有更好的东西出现!但是不要开玩笑说大脑缺失,你不知道失去大脑的哪些部分会对一个人产生什么影响... - Radu
1
感谢@vipul mittal提供的答案 :) - dev90
@Radu 截至2020年,使用ViewPager2会更好。您可以使用RecyclerView.Adapter。 - Cesar Castro
请问您能否在这里回答我的问题 https://stackoverflow.com/q/65439715/11567530? - Ahmed Elsayed

9
您忘记将您的视图添加到容器中。需要在返回视图之前添加。
((ViewPager) container).addView(viewLayout);

也请确保您已经为视图分页设置了当前项目。


4
您没有将视图添加到容器中。
container.addView(viewLayout, 0);

在我的情况下,第二个参数“0”有所不同,例如,那时它起作用了。 - Leukipp

-2
<TabHost
     ......
<TabWidget
.....
<FrameLayout
     android:id="@android:id/tabcontent"
     android:layout_width="0dp"
     android:layout_height="0dp" >
</FrameLayout>
<android.support.v4.view.ViewPager

13
一些解释可能会有所帮助。请参考如何撰写一个好答案? - jub0bs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接