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

Java 获取视图寻呼机的正确实例,java,android,android-viewpager,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=(Te

我使用此代码在视图寻呼机中显示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;
    }
我想从ActionBar中的按钮将该图像和文本发布到facebook上,但使用
instantiateItem()中的
pos=position
有时会得到错误的位置(表示不同的图像)

如何获得正确的位置,以便发布正确的数据。此外,我没有使用片段

我希望问题是清楚的


请帮助……

实例化项(视图组视图,int位置)
中的
位置
参数不代表ViewPager的当前可见项

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

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

如果ViewPager的当前索引位于[5],并且如果向左导航,则当前索引将变为[4]。项目[3]将被实例化,现在
instanceItem()
中的
position
param将为3。并缓存了[3][4][5]

要获取ViewPager的当前索引,请从活动的任何一点使用:

int currentPostion= mViewPager.getCurrentItem();
但是,如果视图分页器已经到达第一个和最后一个索引,则getCurrentItem()返回0。您可能需要覆盖ViewPager的
PageChangeListener的
onPageSelected()
,如下所示

int pos;//to track the current page
mPager.setOnPageChangeListener(new OnPageChangeListener() {

    @Override
    public void onPageSelected(int position) {
        pos=position;
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});

我使用了此方法,但此方法在第一个和最后一个寻呼机中失败!