【问题标题】:Getting the correct instance of view pager获取视图寻呼机的正确实例
【发布时间】:2015-02-17 16:08:39
【问题描述】:

我正在使用此代码在视图寻呼机中显示 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 我有时会得到错误的位置(意味着不同的图像)。

我怎样才能获得正确的位置,以便发布正确的数据。我也没有使用片段。

我希望问题很清楚!

请帮忙....

【问题讨论】:

    标签: java android android-viewpager


    【解决方案1】:

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

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

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

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

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

    int currentPostion= mViewPager.getCurrentItem();
    

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

    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) {
        }
    });
    

    【讨论】:

    • Itiered 这个,但是这个方法对于第一个和最后一个寻呼机都失败了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多