获取正确的视图寻呼机实例

时间:2014-07-09 08:39:59

标签: java android android-viewpager

我正在显示1张imageView&使用此代码在视图寻呼机中显示1个textView

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

        View imageLayout = inflater.inflate(R.layout.item_pager_image, view, false);
        assert imageLayout != null;
        tv=(TextView)imageLayout.findViewById(R.id.textView1);
        tv.setTypeface(typeface);       

        tv.setText(ItemListApplication.names.get(position).getDesc());

        pos = position; // saved the current position in pos

        ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image);

        final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);

        imageLoader.displayImage(images[position], imageView, options, new SimpleImageLoadingListener() {
            @Override

            public void onLoadingStarted(String imageUri, View view) {
                spinner.setVisibility(View.VISIBLE);
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                String message = null;
                switch (failReason.getType()) {
                    case IO_ERROR:
                        message = "Input/Output error";
                        break;
                    case DECODING_ERROR:
                        message = "Image can't be decoded";
                        break;
                    case NETWORK_DENIED:
                        message = "Downloads are denied";
                        break;
                    case OUT_OF_MEMORY:
                        message = "Out Of Memory error";
                        break;
                    case UNKNOWN:
                        message = "Unknown error";
                        break;
                }
                Toast.makeText(ImagePagerActivity.this, message, Toast.LENGTH_SHORT).show();

                spinner.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                spinner.setVisibility(View.GONE);
            }
        });

        view.addView(imageLayout, 0);

        return imageLayout;
    }

我想发布那张图片& Facebook上的文字来自ActionBar中的按钮,但在pos=position中使用instantiateItem()我有时会得到错误的位置(意味着不同的图像)。

如何获得正确的位置,以便发布正确的数据。我也不是在使用片段。

我希望问题很清楚!

请帮忙......

1 个答案:

答案 0 :(得分:2)

position中的instantiateItem(ViewGroup view, int position)参数不代表ViewPager当前可见的项目。

查看寻呼机将一个项目缓存到当前可见项目的左侧和右侧。例如,如果ViewPager的当前索引为[5],则视图寻呼机已经在[5]的左侧和右侧实例化了一个项目。因此,它缓存了[4] [5] [6]。

如果ViewPager的当前索引为[5],并且向右导航,则当前索引将变为[6]。项目[7]将被实例化,现在position中的instantiateItem()参数将为7.并且它缓存[5] [6] [7]。

如果ViewPager的当前索引为[5],如果向左导航,则当前索引将变为[4]。项[3]将被实例化,现在position中的instantiateItem()参数将为3.并且它缓存[3] [4] [5]。

要获取ViewPager的当前索引,请从活动的任何位置使用此参数:

int currentPostion= mViewPager.getCurrentItem();

但是,如果视图寻呼机已经到达第一个和最后一个索引,则getCurrentItem()返回0。您可能需要覆盖ViewPager onPageSelected()的{​​{1}},如下所示。

PageChangeListener