java - 获取 View 寻呼机的正确实例

标签 java android android-viewpager

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

如何获得正确的位置以便发布正确的数据。我也没有使用 fragment 。

我希望问题已经清楚了!

请帮忙......

最佳答案

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

查看分页器将一项缓存到当前可见项的左侧和右侧。例如,如果 ViewPager 的当前索引位于 [5],则 View 分页器已经实例化了 [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 的当前索引,请在 Activity 的任意位置使用此索引:

int currentPostion= mViewPager.getCurrentItem();

但是,如果 View 分页器已经到达第一个和最后一个索引,则 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) {
    }
});

关于java - 获取 View 寻呼机的正确实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24648975/

相关文章:

Java:使用套接字从客户端发送多个图像文件到服务器

java - 在 solr 4.3 中启用基本身份验证

java - Android/Firebase : Glide not working inside one of my fragments

android - 如何在 ListView 中维护 ViewPager 的状态?

android - 在 Activity 之间滑动

java - 空指针异常

java.sql.SQLException :[SQLITE_ERROR] SQL error or missing database (near “ID” :syntax error)

Android setAuthToken 第一次不工作

android - pending是不是代表它的execute方法在Android中还没有被调用?

android - 调整viewpager里面的view size,弥补tab height